SQL Server non viene avviato con quando il server è configurato per l'uso di SSL

Questo articolo fornisce una risoluzione per l'errore 17182 (inizializzazione TDSSNIClient non riuscita con errore 0xd, codice di stato 0x38) che si verifica quando il server è configurato per l'uso di SSL.

Si applica a: SQL Server
Numero KB originale: 2023869

Sintomi

Considerare lo scenario descritto di seguito:

  • Si dispone di un'istanza di SQL Server 2005 o versione successiva ospitata in un sistema che esegue Windows Server 2008 o una versione successiva del sistema operativo.

  • È stata configurata la crittografia SSL per il SQL Server immettendo manualmente l'identificazione personale di un certificato nel valore Certificato nella chiave del Registro di sistema seguente:

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

In questo scenario, l'avvio del SQL Server potrebbe non riuscire e i messaggi seguenti vengono registrati nel SQL Server Errorlog:

<Errore del server Datetime> : 17182, Gravità: 16, Stato: 1.
<Inizializzazione TDSSNIClient del server Datetime> non riuscita con 0xd di errore, codice di stato 0x38.
<Errore del server Datetime> : 17182, Gravità: 16, Stato: 1. <Inizializzazione TDSSNIClient del server Datetime> non riuscita con errore 0xd, codice di stato 0x1.
<Errore del server Datetime> : 17826, Gravità: 18, Stato: 3.
<Server Datetime> Impossibile avviare la libreria di rete a causa di un errore interno nella libreria di rete. Per determinare la causa, esaminare gli errori immediatamente precedenti a questo nel log degli errori.
<Errore del server Datetime> : 17120, Gravità: 16, Stato: 1.
<Il server Datetime> SQL Server non è riuscito a generare il thread FRunCM. Per informazioni sui possibili problemi correlati, controllare il log degli errori SQL Server e i log eventi di Windows.

Causa

Una causa radice comune per questi sintomi è un carattere invisibile che potrebbe essere stato inavvertitamente aggiunto al valore identificazione personale del certificato, quando viene copiato dal controllo rich-edit dello snap-in Certificati in MMC.

Risoluzione

È possibile usare una delle soluzioni seguenti:

  • Evitare di copiare caratteri iniziali dallo snap-in Certificati in MMC quando si copia il valore identificazione personale di un certificato.

  • Usare lo strumento Certutil anziché lo snap-in certificati in MMC per esportare il certificato in un file di testo e quindi copiare il valore identificazione personale del certificato richiesto dal file di testo. L'utilizzo è illustrato di seguito:

    Per visualizzare il contenuto dell'archivio certificati utente corrente del computer, digitare quanto segue al prompt dei comandi:

    certutil -store -user my

    Per visualizzare il contenuto dell'archivio certificati computer locale del computer, digitare quanto segue al prompt dei comandi:

    certutil -store my

È possibile indirizzare l'output del comando precedente a un file di testo usando quanto segue in un prompt dei comandi amministrativo in sistemi operativi basati su Vista:

certutil -store my > cert.txt

L'identificazione personale può essere individuata nella riga che inizia con Cert Hash(sha1)

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

È quindi possibile copiare questo valore (senza spazi: per l'esempio precedente sarà e7024b42c404fd448cec21f191765cb7c3ad1d55) nel valore Certificato nella chiave del Registro di sistema seguente:

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

Ulteriori informazioni

Un codice di stato 0x38 nel messaggio di errore 17182 indica che SQL Server si è verificato un errore durante l'inizializzazione di SSL. Per altre informazioni, vedere Protocolli SQL .

Il codice restituito 0xd indica l'errore del sistema operativo 0xd (13) che si traduce in "I dati non sono validi" L'errore precedente 17182 "TDSSNIClient initialization failed with error 0xd, status code 0x38" si verifica specificamente a causa del fatto che la stringa in Valore certificato non può essere convertita correttamente in un'identificazione personale valida del certificato.

Questo problema della GUI con lo snap-in Certificati non si verifica nelle versioni precedenti di Windows (ad esempio, Windows XP, Windows Server 2003), in quanto non usa un controllo di modifica avanzata nello snap-in Certificati

Per verificare se si sta verificando il problema documentato in questo articolo, è possibile usare la procedura seguente:

  1. Aprire regedit e passare alla chiave del Registro di sistema seguente ed esportare la chiave in SSLKey.reg file:

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

  2. Aprire il file SSLKey.reg dal passaggio 1 usando il Blocco note e usare la finestra di dialogo Salva con nome nel menu File , fare clic su ANSI nell'elenco Codifica e quindi fare clic su Salva.

  3. Se viene visualizzato l'avviso seguente, passare al passaggio 3 facendo clic su OK.

    Avviso

    Questo file contiene caratteri in formato Unicode che andranno persi se si salva questo file come file di testo con codifica ANSI. Per mantenere le informazioni Unicode, fare clic su Annulla di seguito e quindi selezionare una delle opzioni Unicode nell'elenco a discesa Codifica. Continuare?

  4. Chiudere il file SSLKey.reg e riaprirlo usando il Blocco note.

  5. Se ora viene visualizzato un segno di domanda o qualsiasi altro carattere non valido nell'identificazione personale del certificato, è un'indicazione che probabilmente si sta riscontrando il problema documentato in questo articolo:

    Una voce di esempio può essere simile alla seguente:

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