SQL Server ne parvient pas à démarrer avec quand le serveur est configuré pour utiliser SSL

Cet article fournit une résolution pour l’erreur 17182 (échec de l’initialisation TDSSNIClient avec l’erreur 0xd, status code 0x38) qui se produit lorsque le serveur est configuré pour utiliser SSL.

S’applique à : SQL Server
Numéro de la base de connaissances d’origine : 2023869

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous disposez d’un 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 SQL Server en entrant manuellement l’empreinte numérique d’un certificat dans la valeur Certificat sous la clé de Registre suivante :

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

Dans ce scénario, votre 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.
<L’initialisation TDSSNIClient du serveur Datetime> a échoué avec une erreur 0xd, status code 0x38.
<Erreur du serveur Datetime> : 17182, Gravité : 16, État : 1. <L’initialisation TDSSNIClient du serveur DateTime> a échoué avec l’erreur 0xd, status code 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 en déterminer la cause, passez en revue 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. Consultez le journal des erreurs SQL Server et les journaux des événements Windows pour plus d’informations sur les éventuels problèmes connexes.

Cause

Une cause racine courante de ces symptômes est un caractère invisible qui peut avoir été ajouté par inadvertance à la valeur d’empreinte numérique du certificat, lorsqu’il est copié à partir du contrôle rich-edit 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 d’un certificat.

  • Utilisez l’outil Certutil au lieu du composant logiciel enfichable certificats dans MMC pour exporter le certificat dans un fichier texte, puis copiez la valeur d’empreinte du certificat requis à partir du fichier texte. L’utilisation est illustré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 ce qui suit à une 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 s’agit d’e7024b42c404fd448cec21f191765cb7c3ad1d55) dans la valeur Certificate sous la clé de Registre suivante :

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

Plus d’informations

Un code status 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 Protocoles SQL .

Le code de retour 0xd indique l’erreur du système d’exploitation 0xd (13), ce qui se traduit par « Les données ne sont pas valides » L’erreur ci-dessus 17182 « L’initialisation TDSSNIClient a échoué avec l’erreur 0xd, status code 0x38 » se produit spécifiquement en raison du fait que la chaîne sous Valeur de certificat ne peut pas être correctement convertie en une empreinte numérique valide du certificat.

Ce problème d’interface graphique utilisateur 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 case activée si vous rencontrez le problème décrit dans cet article, vous pouvez utiliser la procédure suivante :

  1. Ouvrez regedit, accédez à la clé de Registre suivante et exportez la clé vers SSLKey.reg fichier :

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

  2. 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 Encodage , puis cliquez sur Enregistrer.

  3. 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

  4. Fermez le fichier SSLKey.reg et rouvrez-le à l’aide du Bloc-notes.

  5. Si vous voyez maintenant un point d’interrogation ou tout autre caractère non valide dans l’empreinte de votre certificat, cela indique que vous rencontrez probablement le problème décrit 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 »