Я должен сделать доказательство концепции, и до сих пор я нахожу в основном старые статьи, ссылающиеся на IIS6, которые не помогают.IIS 7.5 и аутентификация клиента
Одним словом, у меня есть следующие требования.
Мне нужно защитить один файл/страницу и этот файл/страницу только с помощью сертификата клиента. Остальная часть сайта должна продолжать работать под 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, чтобы клиентские сертификаты должны быть прикреплены к запросу и только что прошли через это было бы здорово.
Я нахожу, что если вы укажете 'SslRequireCert', вы также должны * указать * SslNegotiateCert'. – AakashM
похоже, что вы на что-то. Не могли бы вы проверить http://stackoverflow.com/questions/14407666/how-do-implement-client-certificate-authentication-the-right-way и, возможно, предоставить необходимую информацию, которую я ищу? Важным для меня, связанным с этим ответом, является важность этого узла ClientCertificateMappingAuthentication в файле web.config для серверной части конфигурации. –