Condividi tramite


L'avvio di SQL Server non riesce 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

Prendi in considerazione lo scenario seguente:

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

  • È stata configurata la crittografia SSL per 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 di SQL Server potrebbe non riuscire e i messaggi seguenti vengono registrati nel log degli errori di SQL Server:

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

Causa

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

Risoluzione

È possibile usare una delle risoluzioni 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 al prompt dei comandi amministrativo nei sistemi operativi basati su Vista:

certutil -store my > cert.txt

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

Ad esempio: Cert Hash(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 ha riscontrato un errore durante l'inizializzazione di SSL. Per altri dettagli, 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 17182 "L'inizializzazione TDSSNIClient non è riuscita con errore 0xd, il codice di stato 0x38" si verifica in modo specifico a causa del fatto che la stringa in Valore certificato non può essere convertita correttamente in un'identificazione personale valida del certificato.

Questo problema di interfaccia utente grafica con lo snap-in Certificati non si verifica nelle versioni precedenti di Windows (ad esempio, Windows XP, Windows Server 2003), perché non usano un controllo di modifica avanzato 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 blocco note e usando 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, procedere con il 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 Blocco note.

  5. Se ora viene visualizzato un punto interrogativo o qualsiasi altro carattere non valido nell'identificazione personale del certificato, è un'indicazione che probabilmente si sta verificando 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"="?b009d02038431da32f095b4ea6a126f4f5c7d18"