SQL Server kann nicht mit gestartet werden, wenn der Server für die Verwendung von SSL konfiguriert ist

Dieser Artikel bietet eine Lösung für den Fehler 17182 (TDSSNIClient-Initialisierung fehlgeschlagen mit Fehler 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 instance von SQL Server 2005 oder einer höheren Version, die auf einem System gehostet wird, auf dem Entweder Windows Server 2008 oder eine höhere Version des Betriebssystems 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 Wert Zertifikat eingeben:

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

In diesem Szenario kann ihr SQL Server möglicherweise nicht gestartet werden, und die folgenden Meldungen werden im SQL Server Errorlog protokolliert:

<Datetime-Serverfehler> : 17182, Schweregrad: 16, Status: 1.
<Fehler bei der TDSSNIClient-Initialisierung des Datetime-Servers> 0xd, status Code 0x38.
<Datetime-Serverfehler> : 17182, Schweregrad: 16, Status: 1. <Fehler bei der Initialisierung des Datetime-Servers> TDSSNIClient mit fehler 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, die unmittelbar diesem Fehler im Fehlerprotokoll vorangehen.
<Datetime-Serverfehler> : 17120, Schweregrad: 16, Status: 1.
<Datetime> Server SQL Server konnte keinen FRunCM-Thread erzeugen. Überprüfen Sie das SQL Server Fehlerprotokoll und die Windows-Ereignisprotokolle, um Informationen zu möglichen verwandten Problemen zu finden.

Ursache

Eine häufige Grundursache für diese Symptome ist ein unsichtbares Zeichen, das möglicherweise 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 das Kopieren von führenden Zeichen aus dem Zertifikat-Snap-In in MMC, wenn Sie den Fingerabdruckwert eines Zertifikats kopieren.

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

    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 für den lokalen Computer des Computers anzuzeigen:

    certutil -store my

Sie können die Ausgabe des obigen Befehls an eine Textdatei weiterleiten, indem Sie folgendes an einer administrativen Eingabeaufforderung unter Vista-basierten Betriebssystemen 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 ist er e7024b42c404fd448cec21f191765cb7c3ad1d55) in den Zertifikatwert unter dem folgenden Registrierungsschlüssel kopieren:

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

Weitere Informationen

Ein in der Fehlermeldung 17182 0x38 status Code 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 den Betriebssystemfehler 0xd (13), der sich in "Die Daten sind ungültig" übersetzt. Der obige Fehler 17182 "Fehler bei der Initialisierung von TDSSNIClient mit Fehler 0xd, status Code 0x38" tritt insbesondere auf, weil 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 bei älteren Versionen von Windows (z. B. Windows XP, Windows Server 2003) nicht auf, da sie kein umfangreiches Bearbeitungssteuerelement im Zertifikat-Snap-In verwenden.

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

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

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

  2. Öffnen Sie die SSLKey.reg Datei aus Schritt 1 mithilfe von Editor, und klicken Sie im Menü Datei im Dialogfeld Speichern unter auf ANSI in der Liste Codierung, 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 SSLKey.reg-Datei, und öffnen Sie sie im Editor erneut.

  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 stürzt:

    Ein Beispieleintrag kann in etwa wie folgt aussehen:

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