SQL Server kann nicht gestartet werden, 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 eine höhere Version, die auf einem System gehostet wird, das entweder Windows Server 2008 oder eine höhere Version des Betriebssystems ausführt.
Sie haben die SSL-Verschlüsselung für Ihren 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 nicht gestartet werden, und die folgenden Meldungen werden im SQL Server-Fehlerprotokoll protokolliert:
<Datetime> Server-Fehler: 17182, Schweregrad: 16, Status: 1.
<Fehler bei der Datetime> Server TDSSNIClient-Initialisierung mit fehler 0xd, Statuscode 0x38.
<Datetime> Server-Fehler: 17182, Schweregrad: 16, Status: 1. <Fehler bei der Datetime> Server TDSSNIClient-Initialisierung mit fehler 0xd, Statuscode 0x1.
<Datetime-Serverfehler> : 17826, Schweregrad: 18, Status: 3.
<Datetime> Server Konnte die Netzwerkbibliothek aufgrund eines internen Fehlers in der Netzwerkbibliothek nicht starten. Überprüfen Sie zum Bestimmen der Ursache die diesem Fehler unmittelbar vorhergehenden Fehler im Fehlerprotokoll.
<Datetime> Server-Fehler: 17120, Schweregrad: 16, Status: 1.
<Datetime> Server SQL Server konnte den FRunCM-Thread nicht spaten. Suchen Sie im SQL Server-Fehlerprotokoll und in den Windows-Ereignisprotokollen nach Informationen zu möglichen verwandten Problemen.
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 Zertifikats in MMC kopiert wird.
Lösung
Sie können eine der folgenden Auflö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 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:
Um den Inhalt des aktuellen Benutzerzertifikatspeichers des Computers anzuzeigen, geben Sie folgendes an der Eingabeaufforderung ein:
certutil -store -user my
Um den Inhalt des Zertifikatspeichers des lokalen Computers anzuzeigen, geben Sie folgendes an der Eingabeaufforderung ein:
certutil -store my
Sie können die Ausgabe des obigen Befehls an eine Textdatei weiterleiten, indem Sie folgendes an einer Administrativen Eingabeaufforderung auf 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 wird er e7024b42c404fd448cec21f191765cb7c3ad1d55) in den Zertifikatwert 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 SQL Server während der Initialisierung von SSL einen Fehler erlebt hat. Weitere Informationen finden Sie unter SQL-Protokolle .
Der Rückgabecode 0xd den Betriebssystemfehler 0xd (13) angibt, der in "Die Daten ist ungültig" Übersetzt: Der obige Fehler 17182 "TDSSNIClient initialization failed with error 0xd, status code 0x38" tritt speziell aufgrund der Tatsache auf, dass die Zeichenfolge unter Zertifikatwert nicht ordnungsgemäß in einen gültigen Fingerabdruck des Zertifikats konvertiert werden kann.
Dieses GUI-Problem mit dem Zertifikat-Snap-In tritt in älteren Versionen von Windows (z. B. Windows XP, Windows Server 2003) nicht auf, da sie kein Rich-Edit-Steuerelement im Zertifikat-Snap-In verwenden.
Um zu überprüfen, ob das in diesem Artikel dokumentierte Problem aufgetreten ist, können Sie das folgende Verfahren verwenden:
Öffnen Sie regedit, und 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
Öffnen Sie die SSLKey.reg Datei aus Schritt 1 mit Editor, und verwenden Sie das Dialogfeld "Speichern unter" im Menü "Datei", klicken Sie in der Codierungsliste auf ANSI, und klicken Sie dann auf "Speichern".
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. Fortsetzen?
Schließen Sie die SSLKey.reg Datei, und öffnen Sie sie mit Editor erneut.
Wenn nun ein Fragezeichen oder ein anderes ungültiges Zeichen im Fingerabdruck Ihres Zertifikats angezeigt wird, ist es ein Hinweis darauf, dass sie wahrscheinlich in dem in diesem Artikel dokumentierten Problem auftreten:
Ein Beispieleintrag sieht möglicherweise ähnlich wie folgt aus:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
"Certificate"="?b009d02038431da332f095b4ea6a126f4f5c7d18"