SQL Server kan inte börja med när servern är konfigurerad för att använda SSL

Den här artikeln innehåller en lösning på felet 17182 (TDSSNIClient-initieringen misslyckades med fel 0xd, statuskod 0x38) som inträffar när servern är konfigurerad att använda SSL.

Gäller för: SQL Server
Ursprungligt KB-nummer: 2023869

Symptom

Föreställ dig följande scenario:

  • Du har en instans av SQL Server 2005 eller en senare version som finns på ett system som kör antingen Windows Server 2008 eller en senare version av operativsystemet.

  • Du har konfigurerat SSL-kryptering för SQL Server genom att manuellt ange tumavtrycket för ett certifikat i certifikatvärdet under följande registernyckel:

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

I det här scenariot kan det hända att SQL Server inte startar och följande meddelanden loggas i SQL Server-felloggen:

<Datetime> Server-fel: 17182, Allvarlighetsgrad: 16, Tillstånd: 1.
<Datetime> Server TDSSNIClient-initieringen misslyckades med fel 0xd, statuskod 0x38.
<Datetime> Server-fel: 17182, Allvarlighetsgrad: 16, Tillstånd: 1. <Datetime> Server TDSSNIClient-initieringen misslyckades med fel 0xd, statuskod 0x1.
<Datetime> Server-fel: 17826, Allvarlighetsgrad: 18, Tillstånd: 3.
<Datetime> Server Det gick inte att starta nätverksbiblioteket på grund av ett internt fel i nätverksbiblioteket. Du kan fastställa orsaken genom att granska felen omedelbart före den här i felloggen.
<Datetime> Server-fel: 17120, Allvarlighetsgrad: 16, Tillstånd: 1.
<Datetime> Server SQL Server kunde inte skapa FRunCM-tråd. I SQL Server-felloggen och Windows-händelseloggarna finns information om möjliga relaterade problem.

Orsak

En vanlig rotorsak till dessa symtom är ett osynligt tecken som oavsiktligt kan ha lagts till i certifikatets tumavtrycksvärde när det kopieras från snapin-modulen Certifikats rich-edit-kontroll i MMC.

Åtgärd

Du kan använda någon av följande lösningar:

  • Undvik att kopiera inledande tecken från snapin-modulen Certifikat i MMC när du kopierar tumavtrycksvärdet för ett certifikat.

  • Använd verktyget Certutil i stället för snapin-modulen certifikat i MMC för att exportera certifikatet till en textfil och kopiera sedan tumavtrycksvärdet för det certifikat som krävs från textfilen. Användningen visas nedan:

    Om du vill visa innehållet i datorns aktuella användarcertifikatarkiv skriver du följande i kommandotolken:

    certutil -store -user my

    Om du vill visa innehållet i datorns certifikatarkiv för lokala datorer skriver du följande i kommandotolken:

    certutil -store my

Du kan dirigera utdata från kommandot ovan till en textfil med hjälp av följande i en administrativ kommandotolk på Vista-baserade operativsystem:

certutil -store my > cert.txt

Tumavtrycket kan placeras i raden som börjar med Cert Hash(sha1)

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

Du kan sedan kopiera det här värdet (utan blanksteg – i exemplet ovan blir det e7024b42c404fd448cec21f191765cb7c3ad1d55) till certifikatvärdet under följande registernyckel:

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

Mer information

En statuskod 0x38 i felmeddelandet 17182 innebär att SQL Server upplevde ett fel under initieringen av SSL. Mer information finns i SQL-protokoll .

Returkoden 0xd anger OS-fel 0xd (13) som översätts till "Data är ogiltiga" Ovanstående fel 17182 "TDSSNIClient-initiering misslyckades med fel 0xd, statuskod 0x38" inträffar specifikt på grund av att strängen under Certifikatvärde inte kan konverteras tillbaka till ett giltigt tumavtryck av certifikatet.

Det här GUI-problemet med snapin-modulen Certifikat uppstår inte i äldre versioner av Windows (till exempel Windows XP, Windows Server 2003), eftersom de inte använder en omfattande redigeringskontroll i snapin-modulen Certifikat

Om du vill kontrollera om du stöter på problemet som beskrivs i den här artikeln kan du använda följande procedur:

  1. Öppna regedit och gå till följande registernyckel och exportera nyckeln till SSLKey.reg fil:

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

  2. Öppna filen SSLKey.reg från steg 1 med anteckningar och klicka på ANSI i kodningslistan med hjälp av dialogrutan Spara som i arkiv-menyn och klicka sedan på Spara.

  3. Om du får varningen nedan fortsätter du till steg 3 genom att klicka på OK.

    Varning

    Den här filen innehåller tecken i Unicode-format som går förlorade om du sparar filen som en ANSI-kodad textfil. Om du vill behålla Unicode-informationen klickar du på Avbryt nedan och väljer sedan något av Unicode-alternativen i listrutan Kodning. Fortsätta?

  4. Stäng filen SSLKey.reg och öppna den igen med anteckningar.

  5. Om du nu ser ett frågetecken eller något annat ogiltigt tecken i tumavtrycket för certifikatet är det en indikation på att du förmodligen stöter på problemet som beskrivs i den här artikeln:

    En exempelpost kan se ut ungefär så här:

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