« Le certificat reçu du serveur distant a été émis par une autorité de certification non approuvée » lorsque vous vous connectez à SQL Server

Version du produit d’origine : SQL Server
Numéro de base de connaissances d’origine : 2007728

Résumé

Cet article vous aide à résoudre l’erreur « Le certificat reçu à partir du serveur distant a été émis par une autorité de certification non approuvée » qui se produit lorsqu’un client établit une connexion chiffrée (TLS) à SQL Server. L'erreur signifie que le client ne peut pas valider le certificat présenté par l'instance SQL Server pendant la négociation TLS, généralement parce que l'autorité de certification émettrice n'est pas dans le magasin des autorités de certification racines approuvées du client, ou parce que SQL Server utilise un certificat auto-signé.

Vous résolvez l’erreur en installant le certificat d’autorité de certification émettrice sur l’ordinateur client, en faisant confiance au certificat de serveur sans validation (paramètre de certificat de serveur d’approbation ) ou en modifiant la configuration de chiffrement sur le client ou le serveur. Les versions récentes de plusieurs pilotes et outils clients ont modifié leurs valeurs par défaut pour exiger le chiffrement. Vous pouvez donc voir cette erreur après une mise à niveau d’un pilote ou d’un outil, même si rien n’a changé sur le serveur.

Symptômes

Lorsque vous vous connectez à SQL Server, vous pouvez recevoir le message d’erreur suivant :

Une connexion a été établie avec le serveur, mais une erreur s’est ensuite produite pendant le processus de connexion. (Fournisseur : Fournisseur SSL, erreur : 0 - La chaîne de certificats a été fournie par une autorité qui n’est pas approuvée.) (Fournisseur de données SqlClient .Net)

En outre, le message d’erreur suivant est enregistré dans le journal des événements système Windows :

Log Name:      System  
Source:        Schannel  
Date:          10/13/2020 3:03:31 PM  
Event ID:      36882  
Task Category: None  
Level:         Error  
Keywords:  
User:        USERNAME  
Computer:     COMPUTERNAME  
Description:  
The certificate received from the remote server was issued by an untrusted certificate authority. Because of this, none of the data contained in the certificate can be validated. The TLS connection request has failed. The attached data contains the server certificate.

Cause

Cette erreur se produit lorsque vous effectuez une connexion chiffrée à SQL Server à l'aide d'un certificat que le client ne peut pas vérifier. Ce comportement se produit dans les scénarios suivants :

Scénario Chiffrement côté serveur Chiffrement côté client Type de certificat Autorité émettrice du certificat présente dans le magasin des autorités de certification racines de confiance
1 Oui Non Certificat provenant d’une source à laquelle le client ne se fie pas (l’autorité émettrice n’est pas répertoriée dans les autorités de certification racines approuvées sur l’ordinateur client) Non
2 Non Oui Certificat auto-signé qui SQL Server génère Non. Les certificats auto-signés n’apparaissent pas dans ce magasin.

Lorsqu’un client établit une connexion chiffrée à SQL Server, Secure Channel (Schannel) établit la liste des autorités de certification de confiance en recherchant dans le magasin Autorités de certification racines de confiance sur l’ordinateur local. Lors du handshake TLS, le serveur envoie son certificat à clé publique au client. L’émetteur d’un certificat de clé publique est appelé autorité de certification. Le client doit confirmer qu’il fait confiance à l’autorité de certification, ce qu’il fait en connaissant à l’avance les clés publiques des autorités de certification de confiance. Lorsque Schannel détecte un certificat émis par une autorité de certification non approuvée, par exemple dans les deux scénarios précédents, vous obtenez le message d’erreur répertorié dans la section Symptômes .

Si aucun certificat approprié n’est configuré ou détecté, le Moteur de base de données génère un certificat de secours auto-signé au démarrage. Il utilise ce certificat pour chiffrer les informations d’identification de connexion et, lorsque le chiffrement côté serveur ou côté client est activé, la connexion entière. Aucun client n’approuve un certificat auto-signé par défaut, ce qui explique pourquoi cette erreur peut se produire sur une installation par défaut de SQL Server, même lorsque le client et le serveur s’exécutent sur le même ordinateur. Pour plus d’informations, consultez Chiffrement des paquets de connexion par rapport au chiffrement des paquets de données.

Pourquoi cette erreur s’affiche après une mise à niveau d’un pilote ou d’un outil

Le pilote client et les versions d’outils du tableau suivant ont modifié leurs valeurs par défaut pour exiger le chiffrement. Après la mise à niveau vers l’une de ces versions, le client chiffre la connexion et valide le certificat de serveur même si la configuration du serveur n’a pas changé. Les versions antérieures n’ont pas besoin de chiffrement par défaut. Par conséquent, le certificat n’a pas été validé, sauf si vous avez demandé explicitement le chiffrement.

Pilote ou outil client Version Comportement de chiffrement par défaut
Microsoft OLE DB Driver pour SQL Server (MSOLEDBSQL19) Versions 19 et ultérieures Encrypt est défini par défaut sur Mandatory
Pilote Microsoft ODBC pour SQL Server 18 et versions ultérieures Encrypt est défini par défaut sur Mandatory
Microsoft.Data.SqlClient Versions 4.0 et ultérieures Encrypt est défini par défaut sur True
SQL Server Management Studio (SSMS) Versions 20 et ultérieures Le chiffrement par défaut est obligatoire

Si vous voyez cette erreur immédiatement après la migration d’une application de SQL Server Native Client 11.0 (SNAC) vers Microsoft OLE DB Driver 19 ou Microsoft ODBC Driver 18, consultez la chaîne de certificats non approuvée après la mise à niveau du pilote.

SNAC n'est pas fourni avec SQL Server 2022 (16.x) et versions ultérieures ou avec SSMS 19 et versions ultérieures, et il n'est pas recommandé pour le nouveau développement. Utilisez le Microsoft OLE DB Driver pour SQL Server, le pilote ODBC Microsoft pour SQL Server, ou Microsoft.Data.SqlClient à la place. Pour plus d’informations, consultez Stratégies de support pour SQL Server Native Client.

Solution

Si vous utilisez intentionnellement un certificat d’une autorité non approuvée ou un certificat auto-signé pour chiffrer les connexions à SQL Server, utilisez l’une des options suivantes :

Option 1 : Installer l’autorité de certification sur l’ordinateur client

Pour le scénario 1, ajoutez l’autorité de certification au magasin des autorités de certification racines de confiance sur l’ordinateur client qui initie la connexion chiffrée. Pour ce faire, effectuez l’étape 1 : exporter le certificat de serveur vers un fichier et l’étape 2 : installez l’autorité de certification racine sur les procédures de l’ordinateur client dans cette séquence.

Étape 1 : Exporter le certificat de serveur vers un fichier

Sur l’ordinateur SQL Server, exportez le certificat que SQL Server utilise dans un fichier. Les étapes suivantes utilisent caCert.cer comme exemple de nom de fichier. Ce fichier n’existe pas tant que vous ne l’avez pas créé dans cette procédure. Vous choisissez le nom et l’emplacement.

  1. Sélectionnez Démarrer, entrez mmc, puis ouvrez Microsoft Management Console.

  2. Sélectionnez Fichier>Ajouter/Supprimer un composant logiciel enfichable.

  3. Dans la liste Composants logiciels enfichables disponibles, sélectionnez Certificats, puis sélectionnez Ajouter.

  4. Sélectionnez Compte d’ordinateur, sélectionnez Suivant, sélectionnez Ordinateur local : (l’ordinateur sur lequel cette console est en cours d’exécution), puis sélectionnez Terminer.

    Note

    Les certificats SQL Server sont installés dans le magasin de certificats Local Computer\Personal. Si vous sélectionnez Mon compte d'utilisateur, MMC ouvre un autre magasin de certificats et le certificat SQL Server n'apparaît pas.

  5. Sélectionnez OK pour fermer la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables .

  6. Dans le volet gauche, développez Certificats (ordinateur local), développez Personnel, puis sélectionnez Certificats.

  7. Cliquez avec le bouton droit sur le certificat que SQL Server utilise, puis sélectionnez Toutes les tâches>d’exportation.

    Tip

    Pour identifier le certificat que SQL Server utilise, ouvrez Gestionnaire de configuration SQL Server, développez SQL Server Configuration réseau, cliquez avec le bouton droit sur Protocoles pour <le nom> de l’instance, sélectionnez Propriétés, puis sélectionnez l’onglet Certificat. Si le journal des erreurs SQL Server contient l’entrée « Un certificat auto-généré a été correctement chargé pour le chiffrement », SQL Server utilise un certificat de secours généré. Vous ne pouvez pas exporter ce certificat. Utilisez plutôt l’option 2 ou l’option 3 .

  8. Sélectionnez Suivant pour passer la page d’accueil de l’Assistant Exportation de certificat.

  9. Vérifiez que Non, n’exportez pas la clé privée est sélectionnée, puis sélectionnez Suivant.

  10. Assurez-vous que l’un des fichiers binaires codés par DER X.509 (. CER) ou X.509 codé en base 64 (. CER) est sélectionné, puis sélectionnez Suivant.

  11. Entrez un nom de fichier d’exportation, tel que caCert.cer.

  12. Sélectionnez Suivant, puis sélectionnez Terminer pour exporter le certificat.

  13. Copiez le fichier .cer exporté sur l’ordinateur client.

Étape 2 : Installer l’autorité de certification racine sur l’ordinateur client

  1. Sur l’ordinateur client, ouvrez MMC, sélectionnezAjouter/Supprimer le composant logiciel enfichableFichier>, sélectionnez Certificats dans la liste des composants logiciels enfichables disponibles, puis sélectionnez Ajouter.

  2. Dans la boîte de dialogue du composant logiciel enfichable Certificats, sélectionnez Compte d’ordinateur, puis Suivant.

  3. Dans le volet Sélectionner un ordinateur, sélectionnez Ordinateur local : (l’ordinateur sur lequel cette console est en cours d’exécution), puis sélectionnez Terminer.

  4. Sélectionnez OK pour fermer la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables .

  5. Dans le volet gauche de MMC, développez le nœud Certificats (ordinateur local).

  6. Développez le nœud Autorités de certification racines approuvées, cliquez avec le bouton droit sur le sous-dossier Certificats, sélectionnez Toutes les tâches, puis Importer.

  7. Dans l’Assistant Importation de certificat, dans la page d’accueil , sélectionnez Suivant.

  8. Dans la page Fichier à importer , sélectionnez Parcourir.

  9. Accédez à l’emplacement du fichier de certificat caCert.cer , sélectionnez le fichier, puis sélectionnez Ouvrir.

  10. Dans la page Fichier à importer , sélectionnez Suivant.

  11. Dans la page Magasin de certificats, acceptez la sélection par défaut, puis sélectionnez Suivant.

  12. Sur la page Fin de l’Assistant Importation de certificat, sélectionnez Terminer.

Option 2 : Approuver le certificat de serveur sans le valider

Pour les scénarios 1 et 2, définissez le paramètre de certificat de serveur d’approbation dans votre application cliente. Ce paramètre conserve la connexion chiffrée, mais ignore la validation du certificat. Le nom du mot clé et les valeurs acceptées dépendent de la bibliothèque cliente :

Bibliothèque de client Mot clé de chaîne de connexion
Microsoft.Data.SqlClient TrustServerCertificate=True
Pilote Microsoft ODBC pour SQL Server TrustServerCertificate=yes
Microsoft OLE DB Driver pour SQL Server (chaîne du fournisseur) TrustServerCertificate=yes
Microsoft OLE DB Driver pour SQL Server (ADO ou IDataInitialize) Trust Server Certificate=true
Pilote Microsoft JDBC pour SQL Server trustServerCertificate=true

Si vous vous connectez à l’aide de SQL Server Management Studio (SSMS) 20 ou version ultérieure, cochez la case Certificat de serveur d’approbation dans la page Connexion de la boîte de dialogue Se connecter au serveur. Dans les versions antérieures de SSMS, sélectionnez Options dans la fenêtre Se connecter au serveur , sélectionnez l’onglet Propriétés de connexion , puis sélectionnez Certificat de serveur d’approbation.

Pour plus d’informations sur la configuration de ce paramètre pour votre bibliothèque cliente, consultez les articles suivants :

Note

Le paramètre Faire confiance au certificat du serveur ne désactive pas le chiffrement. La connexion reste chiffrée, mais le client ne vérifie pas l’identité du serveur.

Caution

Les connexions chiffrées qui utilisent un certificat auto-signé ne fournissent pas de sécurité forte. Ils sont vulnérables aux attaques de l'homme du milieu. Ne vous appuyez pas sur TLS avec des certificats auto-signés dans un environnement de production ou sur des serveurs connectés à Internet.

Option 3 : Modifier la configuration du chiffrement

Si la configuration que les sections précédentes décrivent n’est pas inattendue, utilisez l’une des options suivantes pour résoudre ce problème :

  • Configurez le Moteur de base de données pour utiliser un certificat à partir d’une autorité approuvée. Cette option est le correctif à long terme le plus sécurisé, car les clients valident ensuite le certificat sans configuration supplémentaire. Pour plus d’informations, consultez Activer les connexions chiffrées au Moteur de base de données et Configuration requise des certificats pour SQL Server.

  • Si le chiffrement n’est pas obligatoire :

    • Désactivez le chiffrement dans votre application cliente. Défini Encrypt=Optional pour une chaîne de fournisseur OLE DB, Use Encryption for Data=Optional pour OLE DB ADO ou IDataInitialize, Encrypt=no pour ODBC et Encrypt=False pour Microsoft.Data.SqlClient ou le pilote JDBC Microsoft. Dans SSMS 20 et versions ultérieures, définissez Chiffrement sur Facultatif dans la page Connexion de la boîte de dialogue Se connecter au serveur .

    • Désactivez le chiffrement côté serveur à l’aide de Gestionnaire de configuration SQL Server. Développez SQL Server Configuration réseau, cliquez avec le bouton droit sur Protocoles pour <le nom> de l’instance, sélectionnez Propriétés, sélectionnez l’onglet Indicateurs, définissez Forcer le chiffrement sur Non, puis redémarrez le service SQL Server. Pour plus d’informations, consultez Protocoles pour les propriétés MSSQLSERVER (onglet Indicateurs).

      Warning

      Si vous désactivez le chiffrement, les informations d’identification et les données transitent sur le réseau non protégé. Désactivez le chiffrement uniquement sur les réseaux approuvés et isolés.