SQL Server beginnt nicht damit, wenn der Server für die Verwendung von SSL konfiguriert ist

Dieser Artikel enthält eine Lösung für den Fehler 17182 (TDSSNIClient initialization failed with error 0xd, status code 0x38), der auftritt, wenn der Server für die Verwendung von SSL konfiguriert ist.

Gilt für:   SQL Server
Ursprüngliche KB-Nummer:   2023869

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verfügen über eine Instanz von SQL Server 2005 oder höher, die auf einem System gehostet wird, auf dem Windows Server 2008 oder höher ausgeführt wird.

  • Sie haben die SSL-Verschlüsselung für Ihre SQL Server konfiguriert, indem Sie den Fingerabdruck eines Zertifikats unter dem folgenden Registrierungsschlüssel manuell in den Zertifikatswert eingeben:

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

In diesem Szenario kann ihr SQL Server nicht gestartet werden, und die folgenden Meldungen werden im SQL Server Fehlerprotokoll protokolliert:

<Datetime> Serverfehler: 17182, Schweregrad: 16, Status: 1.
<Datetime> Server TDSSNIClient initialization failed with error 0xd, status code 0x38.
<Datetime> Serverfehler: 17182, Schweregrad: 16, Status: 1. <Datetime> Server TDSSNIClient initialization failed with error 0xd, status code 0x1.
<Datetime> Serverfehler: 17826, Schweregrad: 18, Status: 3.
<Datetime> Server konnte die Netzwerkbibliothek aufgrund eines internen Fehlers in der Netzwerkbibliothek nicht starten. Um die Ursache zu ermitteln, überprüfen Sie die Fehler unmittelbar vor dieser im Fehlerprotokoll.
<Datetime> Serverfehler: 17120, Schweregrad: 16, Status: 1.
<Datetime>Der FRunCM-Thread konnte nicht vom Server SQL Server ausgelöst werden. Überprüfen Sie das SQL Server-Fehlerprotokoll und die Windows-Ereignisprotokolle, um Informationen zu möglichen verwandten Problemen zu finden.

Ursache

Eine häufige Ursache für diese Symptome ist ein unsichtbares Zeichen, das versehentlich dem Fingerabdruckwert des Zertifikats hinzugefügt wurde, wenn es aus dem Rich-Edit-Steuerelement des Zertifikat-Snap-Ins in MMC kopiert wird.

Lösung

Sie können eine der folgenden Lösungen verwenden:

  • Vermeiden Sie es, führende Zeichen aus dem Zertifikat-Snap-In in MMC zu kopieren, wenn Sie den Fingerabdruckwert eines Zertifikats kopieren.

  • Verwenden Sie das Certutil-Tool anstelle des Zertifikat-Snap-Ins in MMC, um das Zertifikat in eine Textdatei zu exportieren und dann den Fingerabdruckwert des erforderlichen Zertifikats aus der Textdatei zu kopieren. Die Verwendung wird unten gezeigt:

    Geben Sie an der Eingabeaufforderung Folgendes ein, um den Inhalt des Zertifikatspeichers "Aktueller Benutzer" des Computers anzuzeigen:

    certutil -store -user my

    Geben Sie an der Eingabeaufforderung Folgendes ein, um den Inhalt des Zertifikatspeichers "Lokaler Computer" des Computers anzuzeigen:

    certutil -store my

Sie können die Ausgabe des obigen Befehls an eine Textdatei weiterleiten, indem Sie an einer Administrativen Eingabeaufforderung auf Vista-basierten Betriebssystemen Folgendes verwenden:

certutil -store my > cert.txt

Der Fingerabdruck kann sich in der Zeile befinden, die mit Cert Hash(sha1) beginnt.

Beispiel: Cert Hash(sha1): e7 02 4b 42 c4 04 fd 44 8c ec 21 f1 91 76 5c b7 c3 ad 1d 55

Anschließend können Sie diesen Wert (ohne Leerzeichen – im obigen Beispiel e7024b42c404fd448cec21f191765cb7c3ad1d55) in den Zertifikatswert unter dem folgenden Registrierungsschlüssel kopieren:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

Weitere Informationen

Ein Statuscode 0x38 in der Fehlermeldung 17182 bedeutet, dass bei SQL Server während der Initialisierung von SSL ein Fehler aufgetreten ist. Weitere Informationen finden Sie unter SQL Protokolle.

Der Rückgabecode 0xd zeigt den Betriebssystemfehler 0xd (13) an, der in "Die Daten sind ungültig" übersetzt wird. Der obige Fehler 17182 "TDSSNIClient-Initialisierung fehlgeschlagen mit Fehler 0xd, Statuscode 0x38" tritt insbesondere aufgrund der Tatsache auf, dass die Zeichenfolge unter dem Zertifikatwert nicht ordnungsgemäß zurück in einen gültigen Fingerabdruck des Zertifikats konvertiert werden kann.

Dieses GUI-Problem mit dem Zertifikat-Snap-In tritt nicht auf älteren Versionen von Windows auf (z. B. Windows XP, Windows Server 2003), da sie kein Rich-Edit-Steuerelement im Zertifikat-Snap-In verwenden.

Um zu überprüfen, ob das in diesem Artikel beschriebene Problem auftritt, können Sie das folgende Verfahren verwenden:

  1. Öffnen Sie regedit, navigieren Sie zum folgenden Registrierungsschlüssel, und exportieren Sie den Schlüssel in die Datei "SSLKey.reg":

    HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib

  2. Öffnen Sie die Datei "SSLKey.reg" aus Schritt 1 mit Editor und mithilfe des Dialogfelds "Speichern unter" im Menü "Datei", klicken Sie in der Codierungsliste auf ANSI, und klicken Sie dann auf "Speichern".

  3. Wenn Die folgende Warnung angezeigt wird, fahren Sie mit Schritt 3 fort, indem Sie auf "OK" klicken.

    Warnung

    Diese Datei enthält Zeichen im Unicode-Format, die verloren gehen, wenn Sie diese Datei als ANSI-codierte Textdatei speichern. Um die Unicode-Informationen beizubehalten, klicken Sie unten auf "Abbrechen", und wählen Sie dann eine der Unicode-Optionen aus der Dropdownliste "Codierung" aus. Weiter

  4. Schließen Sie die Datei SSLKey.reg, und öffnen Sie sie erneut mit Editor.

  5. Wenn nun ein Fragezeichen oder ein anderes ungültiges Zeichen im Fingerabdruck Ihres Zertifikats angezeigt wird, ist dies ein Hinweis darauf, dass Sie wahrscheinlich auf das in diesem Artikel dokumentierte Problem stoßen:

    Ein Beispieleintrag kann etwa wie folgt aussehen:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
    "Certificate"="?b009d02038431da332f095b4ea6a126f4f5c7d18"