403.7 IIS 7.5 SSL-client-Zertifikat-Authentifizierung Frage
Ich bin testen eines web service mit einem externen partner mit 2-Wege-SSL unter IIS 7.5. Ich bin erfordert SSL, erfordern ein client-cert, und mit eins-zu-eins-Zuordnung zur Authentifizierung an einer Domäne Konto. Ich habe alles konfiguriert und es funktioniert gut auf unser Netzwerk (ich bin in der Lage, eine client-cert, authentifiziert und ruft den service von browser-und Testumgebung).
Von außerhalb unseres Netzwerks (in den meisten Fällen, siehe unten), ich bin immer ein 403.7-Fehlermeldung. Ich habe gegangen durch die Maschine-level-Zertifikat zu speichern und sorgte dafür, dass die Zertifikate und Zertifizierungsstellen sind Vertrauenswürdige.
Hier ist die seltsame Sache. Ich erhielt eine Typ-I-cert zum testen zu Hause (und habe 403.7 wie unsere partner bestimmt ist). Also richte ich Fiddler Debuggen von SSL und schicken Sie mir das Zertifikat, und dieses funktioniert aus irgendeinem Grund. Ich setup eine Testumgebung zu übergeben, die genau die gleiche Zertifikat, und bekam 403.7. Ich Teste in meinem browser (IE 9), nicht bekommen, eine Eingabeaufforderung für einen client-cert, und erhalten Sie 403.7.
Jede Hilfe zu schätzen.
Bill
Du musst angemeldet sein, um einen Kommentar abzugeben.
Letzte mal habe ich geprüft, IIS war mit re-negotiation (standardmäßig), um das client-Zertifikat: es gibt einen ersten händedruck, wo der server nicht Anfrage eines client-Zertifikats, gefolgt von einem handshake (verschlüsselt dieser Zeit), wobei der server das Zertifikat anfordert (über eine TLS -
CertificateRequest
Nachricht). Dadurch wird verhindert, dass Sie sehen, alles von Wireshark, es sei denn, Sie konfigurieren es zur Nutzung der server den privaten Schlüssel und entschlüsseln Sie den Verkehr (beachten Sie, dass dies funktioniert nur mit einige cipher suites).Einen Weg, um zu sehen, das client-Zertifikat Verhandlung ist zum konfigurieren von IIS für die Verwendung von initial-client-Zertifikat-Aushandlung mit netsh und clientcertnegotiation=true (die über ersten Verhandlung). Zumindest die
CertificateRequest
und das Zertifikat wird gesendet, in klaren, die während des Handshakes, so dass Sie sollten in der Lage sein zu sehen, diese mit Wireshark.Wenn der client nicht senden ein Zertifikat auf dem server als Reaktion auf die
CertificateRequest
haben, werden Sie noch sehen, ein leeresCertificate
Nachricht vom client.Wenn Sie nicht exportieren Sie den privaten Schlüssel mit dem Zertifikat zu verwenden, mit Fiddler oder welche anderen Kunden, es gibt keine chance, dass er in der Lage sein, das Zertifikat zu verwenden. Es kann bestenfalls versuchen, senden Sie das Zertifikat, aber der handshake schlägt fehl (da die
CertificateVerify
Nachricht muss signiert werden, indem der client den privaten Schlüssel).Ich denke, man kann das auf ein problem stoßen, wobei:
unsupported_certificate
,certificate_revoked
,certificate_expired
,certificate_unknown
sollte tödlich sein, so ist dies bei der server-Wahl).Sind Sie mit den gleichen physikalischen Maschine zu testen, sowohl die in-Netzwerk und externen Netzwerk-verbindungen? Wenn nicht, sind Sie sicher, dass die externen-Netzwerk-client den privaten Schlüssel zugänglich?
Habe ich nicht konfiguriert Fiddler client-Authentifizierung vor. Funktioniert Lesen Sie das client-Zertifikat und den Schlüssel aus dem standard-Zertifikat-stores? Tut es direkt aus einer PKCS12?
Eine andere Sache, die hilfreich sein können, die Sie inspizieren, der TLS-handshake in WireShark. Überprüfen Sie speziell die Server "Certificate Request" - Meldung, da die Daten hier Hinweise, die der client (IE9), die client-Zertifikate angezeigt werden soll in der Eingabeaufforderung. Vergleichen Sie diese für die internen und externen verbindungen.