Freigeben über


Problembehandlung für SSL-bezogene Probleme (Serverzertifikat)

Gilt für: Internetinformationsdienste 6.0, Internetinformationsdienste 7.0 und höhere Versionen

Überblick

Dieser Artikel hilft Ihnen bei der Behandlung von SSL-Problemen (Secure Sockets Layer) nur im Zusammenhang mit Internetinformationsdienste (IIS). Es deckt Serverzertifikate ab, die für die Serverauthentifizierung vorgesehen sind, und deckt keine Clientzertifikate ab.

Wenn der Abschnitt "Clientzertifikate" auf "Erforderlich" festgelegt ist und dann Probleme auftreten, ist dies nicht der Artikel, auf den Sie verweisen sollten. Dieser Artikel ist nur für die Problembehandlung des SSL Server-Zertifikatproblems vorgesehen.

Es ist wichtig zu wissen, dass jedes Zertifikat einen öffentlichen Schlüssel (für die Verschlüsselung verwendet) und einen privaten Schlüssel (verwendet für die Entschlüsselung) umfasst. Der private Schlüssel ist nur dem Server bekannt.

Der Standardport für HTTPS ist 443. Es wird davon ausgegangen, dass Sie in SSL Handshake und dem Serverauthentifizierungsprozess während des SSL-Handshake gut vertraut sind.

In dieser Problembehandlung verwendete Tools

Die Tools, die zur Problembehandlung der verschiedenen Szenarien verwendet werden, sind:

  • SSLDiag
  • Netzwerkmonitor 3.4 oder Wireshark

Szenarien

Beim Durchsuchen einer Website über HTTPS wird die folgende Fehlermeldung angezeigt:

Screenshot einer Browserseite mit der Meldung, Internet Explorer kann die Webseite nicht anzeigen.

Die erste Voraussetzung, die überprüft werden muss, ist, ob die Website über HTTP zugänglich ist. Wenn dies nicht der Fall ist, gibt es wahrscheinlich ein separates Problem, das in diesem Artikel nicht behandelt wird. Bevor Sie diese Problembehandlung verwenden, müssen Sie über die Website auf HTTP verfügen.

Angenommen, die Website ist über HTTP zugänglich, und die vorherige Fehlermeldung wird angezeigt, wenn Sie versuchen, https zu durchsuchen. Die Fehlermeldung wird angezeigt, da der SSL-Handshake fehlgeschlagen ist. Es könnte viele Gründe geben, die in den nächsten Szenarien detailliert erläutert werden.

Szenario 1

Überprüfen Sie, ob das Serverzertifikat über den entsprechenden privaten Schlüssel verfügt. Sehen Sie sich den folgenden Screenshot des Zertifikatdialogfelds an:

Zwei Screenshots des Dialogfelds

Lösung

Wenn der private Schlüssel fehlt, müssen Sie ein Zertifikat abrufen, das den privaten Schlüssel enthält. Dies ist im Wesentlichen ein . PFX-Datei. Hier ist ein Befehl, den Sie ausführen können, um den privaten Schlüssel dem Zertifikat zuzuordnen::

C:\>certutil - repairstore my "[U+200E] 1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33"

Screenshot der Befehlskonsole mit der Certutil-Syntax.

Wenn die Zuordnung erfolgreich ist, wird das folgende Fenster angezeigt:

Screenshot der Befehlskonsole mit einer Meldung, dass der Befehl erfolgreich abgeschlossen wurde.

In diesem Beispiel 1a 1f 94 8b 21 a2 99 36 77 a8 8e b2 3f 42 8c 7e 47 e3 d1 33 ist der Fingerabdruck des Zertifikats angegeben. So rufen Sie den Fingerabdruck ab:

  1. Öffnen Sie das Zertifikat.
  2. Wählen Sie die Registerkarte Details aus.
  3. Scrollen Sie nach unten, um den Fingerabdruckabschnitt zu finden.
  4. Wählen Sie den Abschnitt Fingerabdruck aus, und klicken Sie auf den folgenden Text.
  5. Führen Sie strg +A und dann STRG+C aus, um sie auszuwählen und zu kopieren.

Screenshot des Dialogfelds

Notiz

Der certutil Befehl ist möglicherweise nicht immer erfolgreich. Wenn dies fehlschlägt, müssen Sie ein Zertifikat abrufen, das den privaten Schlüssel von der Zertifizierungsstelle enthält.

Szenario 2

Berücksichtigen Sie in diesem Szenario, dass Sie über ein Serverzertifikat verfügen, das den privaten Schlüssel enthält, der auf der Website installiert ist. Der in Szenario 1 angezeigte Fehler wird jedoch weiterhin angezeigt. Sie können immer noch nicht über HTTPS auf die Website zugreifen.

Lösung

  1. Laden Sie das SSL-Diagnosetool auf dem Server herunter, und installieren Sie es.

  2. Wenn Sie über ein Zertifikat verfügen, das den privaten Schlüssel enthält und Sie weiterhin nicht auf die Website zugreifen können, versuchen Sie, dieses Tool auszuführen, oder überprüfen Sie die Systemereignisprotokolle auf SChannel-bezogene Warnungen oder Fehler.

    Beim Ausführen des SSLDiag-Tools wird möglicherweise die folgende Fehlermeldung angezeigt:

    Sie haben einen privaten Schlüssel, der diesem Zertifikat entspricht, aber CryptAcquireCertificatePrivateKey fehlgeschlagen ist.

    Screenshot des Fensters

    Darüber hinaus wird die folgende SChannel-Warnung in den Systemereignisprotokollen angezeigt:

    Event Type: Error 
    Event Source: Schannel 
    Event Category: None 
    Event ID: 36870 
    Date: 2/11/2012 
    Time: 12:44:55 AM 
    User: N/A 
    Computer: 
    Description: A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x80090016. 
    

    Dieses Ereignis oder fehler weist darauf hin, dass beim Abrufen des privaten Schlüssels des Zertifikats ein Problem aufgetreten ist. Probieren Sie daher die folgenden Schritte aus, um die Warnung zu beheben:

  3. Überprüfen Sie zunächst die Berechtigungen für den Ordner "MachineKeys ". Alle privaten Schlüssel werden im Ordner "MachineKeys" gespeichert. Stellen Sie daher sicher, dass Sie über die erforderlichen Berechtigungen verfügen.

  4. Wenn die Berechtigungen vorhanden sind und das Problem noch nicht behoben ist, liegt möglicherweise ein Problem mit dem Zertifikat vor. Möglicherweise wurde sie beschädigt. Möglicherweise wird im folgenden SChannel-Ereignisprotokoll ein Fehlercode von 0x8009001a angezeigt:

    Event Type: Error 
    Event Source: Schannel 
    Event Category: None 
    Event ID: 36870 
    Date: 2/11/2012 
    Time: 12:44:55 AM 
    User: N/A 
    Computer: 
    A fatal error occurred when attempting to access the SSL server credential private key. The error code returned from the cryptographic module is 0x8009001a. 
    
  5. Überprüfen Sie, ob die Website mit einem Testzertifikat funktioniert.

  6. Erstellen Sie eine Sicherung des vorhandenen Zertifikats, und ersetzen Sie es dann durch ein selbstsigniertes Zertifikat.

  7. Versuchen Sie, mithilfe von HTTPS auf die Website zuzugreifen. Wenn es funktioniert, wurde das zuvor verwendete Zertifikat beschädigt und muss durch ein neues Arbeitszertifikat ersetzt werden. Manchmal ist das Problem möglicherweise nicht mit dem Zertifikat, sondern mit dem Aussteller. Möglicherweise wird in SSLDiag der folgende Fehler angezeigt:

    Screenshot des Fensters

    CertVerifyCertificateChainPolicy schlägt mit CERT_E_UNTRUSTEDROOT (0x800b0109)dem Stammzertifizierungsstellenzertifikat fehl, wenn das Stammzertifizierungsstellenzertifikat kein vertrauenswürdiger Stamm ist.

  8. Um diesen Fehler zu beheben, fügen Sie das Zertifikat der Zertifizierungsstelle zum Speicher "Vertrauenswürdige Stammzertifizierungsstelle" unter "Mein Computerkonto" auf dem Server hinzu. Möglicherweise wird auch der folgende Fehler angezeigt:

    CertVerifyCertificateChainPolicy hat den Fehler -2146762480(0x800b0110) zurückgegeben.

  9. Um den Fehler zu beheben, überprüfen Sie den Verwendungstyp des Zertifikats, indem Sie die folgenden Schritte ausführen:

    1. Öffnen Sie das Zertifikat.
    2. Wählen Sie die Registerkarte Details aus.
    3. Wählen Sie Eigenschaften bearbeiten aus.
    4. Vergewissern Sie sich auf der Registerkarte "Allgemein ", dass die Option "Alle Zwecke für dieses Zertifikat aktivieren" ausgewählt ist und vor allem die Serverauthentifizierung in der Liste vorhanden sein sollte.

    Der Screenshot zeigt einen Teil des Dialogfelds

Szenario 3

In den ersten beiden Szenarien wird die Integrität des Zertifikats überprüft. Nachdem Sie bestätigt haben, dass es keine Probleme mit dem Zertifikat gibt, wird ein größenfähiges Problem gelöst. Aber was geschieht, wenn die Website immer noch nicht über HTTPS zugänglich ist? Überprüfen Sie die HTTPS-Bindungen der Website, und bestimmen Sie, auf welchen Port und welche IP sie lauscht.

Lösung

  1. Führen Sie den folgenden Befehl aus, um sicherzustellen, dass kein anderer Prozess auf den von der Website verwendeten SSL-Port lauscht.

    netstat -ano" or "netstat -anob
    
  2. Wenn ein anderer Prozess an diesem Port überwacht wird, überprüfen Sie, warum dieser Prozess diesen Port verwendet.

  3. Versuchen Sie, die Kombination aus IP-Port zu ändern, um zu überprüfen, ob auf die Website zugegriffen werden kann.

Szenario 4

Jetzt können Sie sicher sein, dass auf der Website ein ordnungsgemäßes Funktionierendes Zertifikat installiert ist und es keinen anderen Prozess mit dem SSL-Port für diese Website gibt. Möglicherweise wird jedoch weiterhin der Fehler "Seite kann nicht angezeigt werden" beim Zugriff auf die Website über HTTPS angezeigt. Wenn ein Client eine SSL-Aushandlung herstellt und initiiert, durchsucht HTTP.sys seine SSL-Konfiguration nach dem "IP:Port"-Paar, mit dem der Client verbunden ist. Die HTTP.sys SSL-Konfiguration muss einen Zertifikathash und den Namen des Zertifikatspeichers enthalten, bevor die SSL-Aushandlung erfolgreich ist. Das Problem kann mit dem HTTP.SYS SSL Listener.

Der mit HTTP.sys registrierte Zertifikathash kann NULL sein oder eine ungültige GUID enthalten.

Lösung

  1. Führen Sie den folgenden Befehl aus:

    IIS 6: "httpcfg.exe query ssl"
    IIS 7/7.5: "netsh http show ssl"
    

    Notiz

    HttpCfg ist Teil der Windows-Supporttools und ist auf dem Installationsdatenträger vorhanden.

    Nachfolgend sehen Sie ein Beispiel für ein arbeitsfreies und nicht funktionierendes Szenario:

    Arbeitsszenario

    Konfiguration Einstellung
    IP 0.0.0.0:443
    Hash c09b416d6b 8d615db22 64079d15638e96823d
    Guid {4dc3e181-e14b-4a21-b022-59fc669b0914}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    Flags 0

    Arbeitsfreies Szenario

    Konfiguration Einstellung
    IP 0.0.0.0:443
    Hash
    Guid {00000000-0000-0000-0000-000000000000}
    CertStoreName MY
    CertCheckMode 0
    RevocationFreshnessTime 0
    UrlRetrievalTimeout 0
    SslCtlIdentifier 0
    SslCtlStoreName 0
    Flags 0

    Der im Arbeitsszenario angezeigte Hashwert ist der Fingerabdruck Ihres SSL-Zertifikats. Beachten Sie, dass die GUID in einem nicht funktionierenden Szenario alle Null ist. Sie können sehen, dass der Hash entweder einen Wert hat oder leer ist. Selbst wenn Sie das Zertifikat von der Website entfernen und dann ausführen httpcfg query ssl, listet die Website weiterhin GUID als alle 0s auf. Wenn die GUID als "{0000...............000}" angezeigt wird, liegt ein Problem vor.

  2. Entfernen Sie diesen Eintrag, indem Sie den folgenden Befehl ausführen:

    httpcfg delete ssl -i "IP:Port Number"
    

    Beispiel:

    httpcfg delete ssl -i 0.0.0.0:443
    
  3. Um zu ermitteln, ob IP-Adressen aufgelistet sind, öffnen Sie eine Eingabeaufforderung, und führen Sie dann die folgenden Befehle aus:

    IIS 6: httpcfg query iplisten
    
    IIS 7/7.5: netsh http show iplisten
    

    Wenn die IP-Lauschliste leer ist, gibt der Befehl die folgende Zeichenfolge zurück:

    HttpQueryServiceConfiguration completed with 1168.
    

    Wenn der Befehl eine Liste von IP-Adressen zurückgibt, entfernen Sie jede IP-Adresse in der Liste mithilfe des folgenden Befehls:

    httpcfg delete iplisten -i x.x.x.x
    

    Notiz

    Starten Sie IIS nach dieser Verwendung des net stop http /y Befehls neu.

Szenario 5

Trotzdem können Sie, wenn Sie die Website weiterhin auf HTTPS durchsuchen können, eine Netzwerkablaufverfolgung entweder vom Client oder Server erfassen. Filtern Sie die Ablaufverfolgung nach „SSL oder TLS“, um den SSL-Datenverkehr zu betrachten.

Es folgt eine Netzwerkablaufverfolgungsmomentaufnahme eines arbeitsfreien Szenarios:

Screenshot des Fensters

Es folgt eine Netzwerkablaufverfolgungsmomentaufnahme eines Arbeitsszenarios:

Screenshot des Fensters

Dies ist die Methode, wie Sie eine Netzwerkablaufverfolgung betrachten. Sie müssen die Framedetails erweitern und sehen, welches Protokoll und welche Verschlüsselung vom Server gewählt wurde. Wählen Sie in der Beschreibung "Server Hello" aus, um diese Details anzuzeigen.

In dem nicht funktionierenden Szenario war der Client so konfiguriert, dass er nur TLS 1.1 und TLS 1.2 verwendet. Bei dem Webserver handelte es sich jedoch um IIS 6, der nur TLS 1.0 unterstützen kann, so dass der Handshake fehlschlug.

Überprüfen Sie die Registrierungsschlüssel, um zu ermitteln, welche Protokolle aktiviert oder deaktiviert sind. Hier ist der Pfad:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols

Das DWORD „Enabled“ sollte auf „1“ festgelegt werden. Wenn sie auf 0 festgelegt ist, ist das Protokoll deaktiviert.

Beispielsweise ist SSL 2.0 standardmäßig deaktiviert.

Szenario 6

Wenn alles überprüft wurde und wenn weiterhin Probleme beim Zugriff auf die Website über HTTPS auftreten, ist es höchstwahrscheinlich ein Update, das dazu führt, dass der SSL-Handshake fehlschlägt.

Microsoft hat ein Update für die Implementierung von SSL in Windows veröffentlicht:

MS12-006: Vulnerability in SSL/TLS could allow information disclosure: January 10, 2012

Dieses Update kann sich auf Kunden auswirken, die Internet Explorer verwenden oder eine Anwendung verwenden, die Internet Explorer zum Ausführen von HTTPS-Anforderungen verwendet.

Es wurden sogar zwei Änderungen vorgenommen, um die Sicherheitslücke in SSL 3.0/TLS 1.0 zu schließen. Das MS12-006-Update implementiert ein neues Verhalten in schannel.dll, das einen zusätzlichen Datensatz sendet, während eine gemeinsame SSL-Verkettungsblockchiffre verwendet wird, wenn Clients dieses Verhalten anfordern. Die andere Änderung war in Wininet.dll, Teil des kumulativen Updates für Dezember für Internet Explorer (MS11-099), sodass Internet Explorer das neue Verhalten anfordert.

Wenn ein Problem besteht, kann es sich darin äußern, dass die Verbindung zu einem Server nicht hergestellt werden kann oder die Anforderungen unvollständig sind. Internet Explorer 9 und höher können den Fehler "Internet Explorer kann die Webseite nicht anzeigen" anzeigen. In früheren Versionen von Internet Explorer wird möglicherweise eine leere Seite angezeigt.

Fiddler verwendet den zusätzlichen Datensatz nicht, wenn er HTTPS-Anforderungen erfasst und an den Server weiterleitet. Wenn Sie also Fiddler verwenden, um HTTPS-Verkehr zu erfassen, werden die Anforderungen erfolgreich sein.

Registrierungsschlüssel

Wie in MS12-006 dokumentiert: Sicherheitsanfälligkeit in SSL/TLS könnte die Offenlegung von Informationen ermöglichen: 10. Januar 2012 gibt es einen SendExtraRecord-Registrierungswert, der folgende Möglichkeiten hat:

  • Globales Deaktivieren des neuen SSL-Verhaltens,
  • Global aktivieren oder
  • (Standardmäßig) aktivieren Sie sie für SChannel-Clients, die das neue Verhalten auswählen.

Für Internet Explorer und für Clients, die Internet Explorer-Komponenten nutzen, gibt es einen Registrierungsschlüssel im FeatureControl-Abschnitt FEATURE_SCH_SEND_AUX_RECORD_KB_2618444, der bestimmt, ob iexplore.exe oder eine andere benannte Anwendung das neue Verhalten auswäht. Standardmäßig ist dies für Internet Explorer aktiviert und für andere Anwendungen deaktiviert.

Weitere Informationen