SQL Server ne parvient pas à démarrer quand le serveur est configuré pour utiliser SSL
Cet article fournit une résolution de l’erreur 17182 (échec de l’initialisation TDSSNIClient avec l’erreur 0xd, code d’état 0x38) qui se produit lorsque le serveur est configuré pour utiliser SSL.
S'applique à : SQL Server
Numéro de base de connaissances d’origine : 2023869
Symptômes
Examinez le cas suivant :
Vous disposez d’une instance de SQL Server 2005 ou d’une version ultérieure hébergée sur un système exécutant Windows Server 2008 ou une version ultérieure du système d’exploitation.
Vous avez configuré le chiffrement SSL pour votre serveur SQL Server en entrant manuellement l’empreinte numérique d’un certificat dans la valeur de certificat sous la clé de Registre suivante :
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Dans ce scénario, votre serveur SQL Server peut ne pas démarrer et les messages suivants sont enregistrés dans le journal des erreurs SQL Server :
<Erreur du serveur Datetime> : 17182, Gravité : 16, État : 1.
<Échec de l’initialisation du serveur Datetime> SERVER TDSSNIClient avec l’erreur 0xd, le code d’état 0x38.
<Erreur du serveur Datetime> : 17182, Gravité : 16, État : 1. <Échec de l’initialisation du serveur Datetime> TDSSNIClient avec l’erreur 0xd, le code d’état 0x1.
<Erreur du serveur Datetime> : 17826, Gravité : 18, État : 3.
<Le serveur Datetime> n’a pas pu démarrer la bibliothèque réseau en raison d’une erreur interne dans la bibliothèque réseau. Pour déterminer la cause, consultez les erreurs qui précèdent immédiatement celle-ci dans le journal des erreurs.
<Erreur du serveur Datetime> : 17120, Gravité : 16, État : 1.
<Datetime> Server SQL Server n’a pas pu générer le thread FRunCM. Vérifiez le journal des erreurs SQL Server et les journaux des événements Windows pour plus d'informations sur des problèmes connexes éventuels.
Cause
Une cause racine courante de ces symptômes est un caractère invisible qui a peut-être été ajouté par inadvertance à la valeur de l’empreinte numérique du certificat, lorsqu’il est copié à partir du contrôle de modification enrichi du composant logiciel enfichable Certificats dans MMC.
Résolution
Vous pouvez utiliser l’une des résolutions suivantes :
Évitez de copier les caractères de début du composant logiciel enfichable Certificats dans MMC lorsque vous copiez la valeur d’empreinte numérique d’un certificat.
Utilisez l’outil Certutil au lieu du composant logiciel enfichable certificats dans MMC pour exporter le certificat vers un fichier texte, puis copiez la valeur d’empreinte du certificat requis à partir du fichier texte. L’utilisation est indiquée ci-dessous :
Pour afficher le contenu du magasin de certificats utilisateur actuel de l’ordinateur, tapez ce qui suit à l’invite de commandes :
certutil -store -user my
Pour afficher le contenu du magasin de certificats ordinateur local de l’ordinateur, tapez ce qui suit à l’invite de commandes :
certutil -store my
Vous pouvez diriger la sortie de la commande ci-dessus vers un fichier texte à l’aide de l’invite de commandes d’administration sur les systèmes d’exploitation Vista :
certutil -store my > cert.txt
L’empreinte numérique peut se trouver dans la ligne qui commence par Cert Hash(sha1)
Par exemple : Cert Hash(sha1) : e7 02 4b 42 c4 04 fd 44 8c ec 21 f1 91 76 5c b7 c3 ad 1d 55
Vous pouvez ensuite copier cette valeur (sans espaces , pour l’exemple ci-dessus, il sera e7024b42c404fd448cec21f191765cb7c3ad1d55) dans la valeur de certificat sous la clé de Registre suivante :
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Plus d’informations
Un code d’état 0x38 dans le message d’erreur 17182 signifie que SQL Server a rencontré une erreur lors de l’initialisation de SSL. Pour plus d’informations, consultez les protocoles SQL.
Le code de retour 0xd indique l’erreur du système d’exploitation 0xd (13) qui se traduit par « Les données ne sont pas valides » L’erreur ci-dessus 17182 « Échec de l’initialisation TDSSNIClient avec l’erreur 0xd, le code d’état 0x38 » se produit spécifiquement en raison du fait que la chaîne sous Valeur de certificat ne peut pas être correctement convertie en empreinte numérique valide du certificat.
Ce problème d’interface graphique graphique avec le composant logiciel enfichable Certificats ne se produit pas sur les versions antérieures de Windows (par exemple, Windows XP, Windows Server 2003), car ils n’utilisent pas de contrôle d’édition enrichi dans le composant logiciel enfichable Certificats
Pour vérifier si vous rencontrez le problème documenté dans cet article, vous pouvez utiliser la procédure suivante :
Ouvrez regedit et accédez à la clé de Registre suivante et exportez la clé dans SSLKey.reg fichier :
HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\<instance>\MSSQLServer\SuperSocketNetLib
Ouvrez le fichier SSLKey.reg de l’étape 1 à l’aide du Bloc-notes et à l’aide de la boîte de dialogue Enregistrer sous dans le menu Fichier , cliquez sur ANSI dans la liste d’encodage , puis cliquez sur Enregistrer.
Si vous recevez l’avertissement ci-dessous, passez à l’étape 3 en cliquant sur OK.
Avertissement
Ce fichier contient des caractères au format Unicode qui seront perdus si vous enregistrez ce fichier en tant que fichier texte encodé ANSI. Pour conserver les informations Unicode, cliquez sur Annuler ci-dessous, puis sélectionnez l’une des options Unicode dans la liste déroulante Encodage. Continuer?
Fermez le fichier SSLKey.reg et rouvrez-le à l’aide du Bloc-notes.
Si vous voyez maintenant un point de questions ou tout autre caractère non valide dans l’empreinte numérique de votre certificat, il s’agit d’une indication que vous rencontrez probablement le problème documenté dans cet article :
Un exemple d’entrée peut ressembler à ce qui suit :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib]
« Certificate"= » ?b009d02038431da332f095b4ea6a126f4f5c7d18 »