Мне нужно проверить концепцию, и до сих пор я нахожу в основном старые статьи, которые ссылаются на IIS6, что не помогает.
Короче говоря, у меня есть следующие требования.
Мне нужно защитить один файл / страницу и этот файл / страницу только с помощью сертификата клиента.Остальная часть сайта должна продолжать работать по протоколу SSL, но не требует сертификата клиента, только этот один файл.Пользовательское сопоставление запрещено, поскольку сопоставление будет выполняться программно через C # / VB.NET.
Теперь я знаю, что это не должно быть сложно.Я имею в виду, что у меня должен быть доступ к свойству Request.ClientCertificate, но моя проблема в том, что при тестировании я не могу получить сертификат клиента для путешествий по проводам.
Я установил IIS в одной папке (просточтобы упростить мою жизнь) требуется SSL и принимать клиентские сертификаты, а также клиентские сертификаты, но все, что я получаю от iis при посещении страницы, это HTTP/1.1 403 Forbidden
.Меня никогда не просят выбрать сертификат клиента для отправки на сервер, который просто извергает весь мой запрос и отбрасывает его.
Становится еще страннее, когда я использую некоторый код для проверки этого.В этом клиентском коде класс CertPolicy просто возвращает true из метода, чтобы игнорировать ошибки сертификата, а test.cer является самоподписанным сертификатом, созданным с использованием MakeCert.Просто чтобы прояснить это, только сертификат клиента, если сам подписан, основной сертификат правильно подписан, но я много играю с фиддлером, и я не доверял этому сертификату, поэтому у меня есть хакерский обратный вызов.
Dim Cert As X509Certificate = X509Certificate.CreateFromCertFile("Cert\test.cer")
' Handle any certificate errors on the certificate from the server.
ServicePointManager.CertificatePolicy = New CertPolicy()
' You must change the URL to point to your Web server.
Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("https://local.domain.com/Cert/Server/"), HttpWebRequest)
Request.ClientCertificates.Add(Cert)
Request.UserAgent = "Client Cert Sample"
Request.Method = "GET"
Dim sr As StreamReader
Using Response As HttpWebResponse = DirectCast(Request.GetResponse, HttpWebResponse)
' Print the repsonse headers.
output.AppendFormat("{0}\r\n", Response.Headers)
output.AppendLine()
' Get the certificate data.
sr = New StreamReader(Response.GetResponseStream, Encoding.Default)
Dim count As Integer
Dim ReadBuf() As Char = New Char((1024) - 1) {}
Do
count = sr.Read(ReadBuf, 0, 1024)
If Not 0 = count Then
output.AppendLine(New String(ReadBuf))
End If
Loop While (count > 0)
End Using
Целевая страница просто возвращает количество прикрепленных сертификатов, которое всегда возвращается, если я устанавливаю IIS для принятия или игнорирования клиентских сертификатов, но не требуется.
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
Dim cs As HttpClientCertificate = Request.ClientCertificate
Response.Write(cs.Count)
Response.End()
End Sub
Если кто-то может помочь мне узнать, какнастроить IIS7.5, чтобы разрешить клиентские сертификаты присоединяться к запросу и просто проходить через него, что было бы здорово.