SQL Server kann nicht beginnen, wenn der Server für die Verwendung von SSL konfiguriert ist.

Dieser Artikel enthält eine Lösung für den Fehler 17182 (TDSSNIClient-Initialisierungsfehler mit Fehler 0xd, Statuscode 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 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 manuell in den Zertifikatwert unter dem folgenden Registrierungsschlüssel 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 Datetime> Server-TDSSNIClient-Initialisierung mit Fehler 0xd, Statuscode 0x38.
<Datetime-Serverfehler> : 17182, Schweregrad: 16, Status: 1. <Fehler bei der Datetime> Server-TDSSNIClient-Initialisierung mit Fehler 0xd, Statuscode 0x1.
<Datetime> Server Error: 17826, Severity: 18, State: 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 diesem fehlerprotokoll unmittelbar vorausgehen.
<Datetime-Serverfehler> : 17120, Schweregrad: 16, Status: 1.
<Datetime> Server SQL Server konnte keinen FRunCM-Thread erstellen. Überprüfen Sie das SQL Server Fehlerprotokoll und die Windows-Ereignisprotokolle auf Informationen zu möglichen verwandten Problemen.

Ursache

Eine häufige Ursache 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 Auflösungen verwenden:

  • Vermeiden Sie das Kopieren von Vorzeichen aus dem Zertifikat-Snap-In in MMC, 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 kopieren Sie dann den Fingerabdruckwert des erforderlichen Zertifikats aus der Textdatei. Die Verwendung wird unten gezeigt:

    Wenn Sie den Inhalt des Zertifikatspeichers für den aktuellen Benutzer des Computers anzeigen möchten, geben Sie an der Eingabeaufforderung Folgendes ein:

    certutil -store -user my

    Geben Sie an der Eingabeaufforderung Folgendes ein, um den Inhalt des Zertifikatspeichers für den lokalen Computer 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 – für das obige Beispiel lautet er e7024b42c404fd448cec21f191765cb7c3ad1d55) in den Zertifikatwert unter dem folgenden Registrierungsschlüssel kopieren:

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

Weitere Informationen

Ein Statuscode, der in der Fehlermeldung 17182 0x38, bedeutet, dass SQL Server während der Initialisierung von SSL einen 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 "Fehler bei der TDSSNIClient-Initialisierung mit Fehler 0xd, Statuscode 0x38" tritt insbesondere aufgrund der Tatsache auf, dass die Zeichenfolge unter dem Zertifikatswert nicht ordnungsgemäß 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 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. Wenn Sie die Unicode-Informationen beibehalten möchten, 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 mit 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 das in diesem Artikel dokumentierte Problem wahrscheinlich auftritt:

    Ein Beispieleintrag kann wie folgt aussehen:

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