Je dois faire une preuve de concept et jusqu'à présent, je trouve principalement des anciens articles qui font référence à IIS6, ce qui n'aide pas.IIS 7.5 et l'authentification du client
En bref, j'ai les exigences suivantes.
Je dois sécuriser un fichier/page et ce fichier/page seulement en utilisant un certificat client. Le reste du site doit continuer à fonctionner sous SSL mais ne nécessite pas de certificat client, juste ce fichier. Le mappage utilisateur est interdit car le mappage sera effectué par programmation via C#/VB.NET. Maintenant, je sais que cela ne devrait pas être difficile. Je veux dire que je devrais avoir accès à la propriété Request.ClientCertificate mais mon problème est que dans mes tests, je ne peux pas obtenir un certificat client pour voyager le long du réseau. J'ai défini IIS sur un dossier (juste pour rendre ma vie simple) exigent SSL et acceptent des certs de client aussi bien qu'exigent des certs de client mais tout que j'obtiens de l'IIS visitant la page est HTTP/1.1 403 Forbidden
. Je ne suis jamais invité à choisir un certificat client à envoyer au serveur, il crache tout sur ma demande et le laisse tomber.
Il devient encore plus bizarre quand j'utilise du code pour le tester. Dans ce code client, la classe CertPolicy renvoie juste une méthode pour ignorer les erreurs cert et test.cer est un certificat auto-signé créé à l'aide de MakeCert. Juste pour que ce soit clair, seulement le cert client si auto signé, le cert principal est correctement signé, mais je joue avec fiddler beaucoup et je n'ai pas confiance en ce cert c'est pourquoi j'ai le callback hacky.
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
La page cible renvoie simplement le nombre de certs ci-joint, qui retourne toujours si je mets IIS pour accepter ou ignorer certs client mais pas obligatoire la.
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
Si quelqu'un peut me aider à trouver comment configurer IIS7.5 pour permettre certs client à joindre à une demande et vient de traverser, ce serait génial.
Je constate que si vous spécifiez 'SslRequireCert', vous devez * également * spécifier' SslNegotiateCert'. – AakashM
semble que vous êtes sur quelque chose. Pourriez-vous vérifier http://stackoverflow.com/questions/14407666/how-do-i-implement-client-certificate-authentication-the-right-way et peut-être fournir les informations nécessaires que je recherche? Important pour moi lié à cette réponse est l'importance de ce noeud ClientCertificateMappingAuthentication dans le web.config pour la partie serveur de la configuration. –