Freigeben über


Problembehandlung für SSL-bezogene Probleme (Serverzertifikat)

Gilt für: Internetinformationsdienste

Übersicht

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 und nicht für Clientzertifikate verwendet werden.

Wenn der Abschnitt "Clientzertifikate" auf " Erforderlich " festgelegt ist und Probleme auftreten, ist dieser Artikel nicht der Abschnitt, 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:

  • Network Monitor 3.4
  • WireShark

Szenarien

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

Screenshot einer Browserseite mit der Meldung, die Verbindung für diese Website ist nicht sicher.

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 kein privater Schlüssel vorhanden ist, müssen Sie ein Zertifikat mit dem privaten Schlüssel abrufen, bei dem es sich im Wesentlichen um einen . PFX-Datei . Hier ist ein Befehl, den Sie ausführen können, um den privaten Schlüssel dem Zertifikat zuzuordnen:

C:\>certutil - repairstore my "906c9825e56a13f1017ea40eca770df4c24cb735"

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 906c9825e56a13f1017ea40eca770df4c24cb735 ist der Fingerabdruck des Zertifikats angegeben. Führen Sie die folgenden Schritte aus, um den Fingerabdruck zu erhalten:

  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 Fingerabdruckabschnitt aus, und markieren Sie den Text darin.
  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

Wenn Sie über ein Zertifikat verfügen, das den privaten Schlüssel enthält, Sie aber nicht auf die Website zugreifen können, wird möglicherweise auch 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. Führen Sie die folgenden Schritte aus, um die Warnung zu beheben:

  1. Überprüfen Sie 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.

  2. 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 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. 
    
  3. Überprüfen Sie, ob die Website mit einem Testzertifikat funktioniert.

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

  5. 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. Während der Überprüfung der Zertifikatkette wird möglicherweise der Fehler CERT_E_UNTRUSTEDROOT (0x800b0109) angezeigt, wenn das Stammzertifizierungsstellenzertifikat kein vertrauenswürdiger Stamm ist.

  6. Um diesen Fehler zu beheben, fügen Sie das Zertifikat der Zertifizierungsstelle zum Speicher der vertrauenswürdigen Stammzertifizierungsstelle unter "Mein Computerkonto" auf dem Server hinzu. Während der Überprüfung der Zertifikatkette wird möglicherweise auch der Fehler angezeigt -2146762480(0x800b0110).

  7. Führen Sie zum Beheben des Fehlers die folgenden Schritte aus, um den Verwendungstyp des Zertifikats zu überprüfen:

    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 könnte mit dem HTTP.SYS SSL Listener.

Der mit HTTP.sys registrierte Zertifikathash ist möglicherweise NULL oder enthält ungültige GUID.

Lösung

  1. Führen Sie den folgenden Befehl aus:

    netsh http show ssl
    

    Hier sind Beispiele für Arbeits- und Arbeitsfreie Szenarien:

    Arbeitsszenario

    Konfiguration Einstellung
    IP:Port 0.0.0.0:443
    Zertifikathash c09b416d6b 8d615db22 64079d15638e96823d
    Anwendungskennung {4dc3e181-e14b-4a21-b022-59fc669b0914}
    Name des Zertifikatspeichers My
    Überprüfen der Clientzertifikatsperrung Aktiviert
    Widerrufsfrischzeit 0
    URL-Abruftimeout 0
    ...... ......

    Arbeitsfreies Szenario

    Konfiguration Einstellung
    IP:Port 0.0.0.0:443
    Zertifikathash
    Anwendungskennung {00000000-0000-0000-0000-000000000000}
    CertStoreName My
    Überprüfen der Clientzertifikatsperrung 0
    Widerrufsfrischzeit 0
    URL-Abruftimeout 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. Möglicherweise wird angezeigt, dass der Hash entweder einen Wert aufweist oder leer ist. Selbst wenn Sie das Zertifikat von der Website entfernen und dann ausführen netsh http show ssl, listet die Website die GUID weiterhin 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:

    netsh http delete sslcert ipport=<IP Address>:<Port>
    

    Zum Beispiel:

    netsh http delete sslcert ipport=0.0.0.0:443
    
  3. Um zu ermitteln, ob IP-Adressen aufgelistet sind, öffnen Sie eine Eingabeaufforderung, und führen Sie dann den folgenden Befehl aus:

    netsh http show iplisten
    

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

    netsh http delete iplisten ipaddress=<IP Address>
    

    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.

Hier ist eine Netzwerkablaufverfolgungsmomentaufnahme eines nicht funktionierenden Szenarios:

Screenshot des Fensters

Hier ist 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. Der IIS-Webserver wurde jedoch so konfiguriert, dass er bis TLS 1.0 unterstützt, sodass der Handshake fehlgeschlagen ist.

Ü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 aktivierte DWORD sollte auf 1 festgelegt werden. Wenn sie auf 0 festgelegt ist, ist das Protokoll deaktiviert.

Beispielsweise ist SSL 2.0 standardmäßig deaktiviert.

Weitere Informationen