Frage

Ich versuche, eine IIS-Website zu konfigurieren, SSL-Client-Zertifikate zu verlangen. Die Website eingerichtet ist, sowohl in IIS 6 und 7, obwohl ich mehr daran interessiert bin in so dass es für 7 arbeitet ich die Client-Zertifikate Eigenschaft in IIS erfordern und es funktioniert gut, wenn die Website über einen Webbrowser zugreifen, sondern ein Java- basierte Client-Probleme hat es Zugriff.

Ich glaube, das Problem ist, dass IIS nicht ein Client-Zertifikat während des ersten SSL-Handshake anfordert. Stattdessen handelt es sich um eine normale SSL-Verbindung, überprüft, ob die Ressource Client-Zertifikate erfordert, und wenn sie es tut initiiert dann eine neue SSL-Handshake, die ein Client-Zertifikat anfordert. IIS tut dies so Support-Seiten, die die Client-Zertifikate für bestimmte Ressourcen nur erfordern. Selbst wenn die Anforderung für die gesamte Website angegeben wird, IIS noch Eingeweihte zwei SSL-Handshakes. Ich mag IIS zwingen, das Client-Zertifikat auf dem ersten SSL-Handshake zu verlangen, die hoffentlich die Dinge werden für die Kunden arbeiten. (Der Client von einem externen Partner entwickelt und ich habe praktisch keine Kenntnisse darüber, wie es eingerichtet ist und keinen Zugriff auf den Quellcode)

Hat jemand mit diesem Problem in IIS behandelt vor?

War es hilfreich?

Lösung

Es dauerte eine Weile, um diese Metabasiseinstellung zu finden. Wir hatten das gleiche Problem mit unserem Kunden die neuen Certicom-Bibliotheken verwenden. Seit der Entdeckung des MITM Angriffs arround SSL-Neuverhandlung hat die Antwort in einer Menge von Kreisen auf renegotitation Anfragen an hangup gewesen.

Ausführen den folgenden cmd von \ inetpub \ Admin wird IIS zwingen, immer ein Client-Zertifikat anfordern.

Für IIS 6: cscript adsutil.vbs set \ w3svc \ siteID \ SSLAlwaysNegoClientCert Wahr

(also für die Standard-Website, cscript adsutil.vbs set \ w3svc \ 1 \ SSLAlwaysNegoClientCert True)

Beachten Sie, dass einige Kunden Internet Explorer Eingabeaufforderung für Client-Zertifikate, wenn sie dieses Paket recieves ob das Client-Zertifikat erforderlich ist oder nicht.

Für IIS 7:

Speichern Sie den folgenden Text in eine Datei namens "Enable_SSL_Renegotiate_Workaround.js"

var vdirObj=GetObject("IIS://localhost/W3svc/1"); 
// replace 1 on this line with the number of the web site you wish to configure 

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert); 
vdirObj.Put("SSLAlwaysNegoClientCert", true); 
vdirObj.SetInfo(); 
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert);

Führen Sie den folgenden Befehl an einer erhöhten / Administrator-Eingabeaufforderung:

cscript.exe enable_ssl_renegotiate_workaround.js

(Jacked aus dem KB-Artikel 977377)

Andere Tipps

Hier ist, wie ich das tat, auf IIS 7.5:

  1. Führen Sie den folgenden in einer Admin-Eingabeaufforderung: netsh http show sslcert
  2. Speichern Sie die Ausgabe in einer Textdatei. aussehen wird so etwas wie folgt aus:

    IP:port                 : 0.0.0.0:443
    Certificate Hash        : [a hash value]
    Application ID          : {[a GUID]}
    Certificate Store Name  : MY
    Verify Client Certificate Revocation    : Enabled
    Verify Revocation Using Cached Client Certificate Only    : Disabled
    Usage Check    : Enabled
    Revocation Freshness Time : 0
    URL Retrieval Timeout   : 0
    Ctl Identifier          : (null)
    Ctl Store Name          : (null)
    DS Mapper Usage    : Disabled
    Negotiate Client Certificate    : Disabled
    
  3. Erstellen Sie eine Batch-Datei, die Informationen:

    netsh http show sslcert
    netsh http delete sslcert ipport=0.0.0.0:443
    netsh http add sslcert ipport=0.0.0.0:443 certhash=[your cert hash from above] appid={[your GUID from above]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable
    netsh http show sslcert
    

    (Ja, müssen Sie löschen und erneut hinzufügen, man kann nicht nur alte clientcertnegotiation in-place Deshalb ist es wichtig, den Hash und GUID zu speichern, so weiß es, was erneut hinzuzufügen.).

  4. Ausführen, dass Batch-Datei, die Prüfung für Fehler, getan.

Beachten Sie, dass diese Einstellung gilt pro-Zertifikat , nicht pro-Server. Wenn Sie also mehrere Zertifikate oder ändern / aktualisieren Sie Ihre cert verwenden, werden Sie dies wieder zu tun haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top