Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- Pour conserver la validation de certificat et résoudre définitivement le problème d’approbation, utilisez l’option 1 : installer l’autorité de certification sur l’ordinateur client.
- Pour vous connecter immédiatement sans installer de certificat, utilisez l’option 2 : approuver le certificat de serveur sans le valider. Cette option est le correctif le plus rapide, et c'est l'option dont la plupart des utilisateurs ont besoin quand SQL Server utilise son certificat auto-signé par défaut.
- Pour arrêter d’exiger le chiffrement ou remplacer le certificat par un certificat d’une autorité approuvée, utilisez l’option 3 : modifier la configuration du chiffrement.
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.
Sélectionnez Démarrer, entrez mmc, puis ouvrez Microsoft Management Console.
Sélectionnez Fichier>Ajouter/Supprimer un composant logiciel enfichable.
Dans la liste Composants logiciels enfichables disponibles, sélectionnez Certificats, puis sélectionnez Ajouter.
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.
Sélectionnez OK pour fermer la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables .
Dans le volet gauche, développez Certificats (ordinateur local), développez Personnel, puis sélectionnez Certificats.
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 .
Sélectionnez Suivant pour passer la page d’accueil de l’Assistant Exportation de certificat.
Vérifiez que Non, n’exportez pas la clé privée est sélectionnée, puis sélectionnez Suivant.
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.
Entrez un nom de fichier d’exportation, tel que caCert.cer.
Sélectionnez Suivant, puis sélectionnez Terminer pour exporter le certificat.
Copiez le fichier .cer exporté sur l’ordinateur client.
Étape 2 : Installer l’autorité de certification racine sur l’ordinateur client
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.
Dans la boîte de dialogue du composant logiciel enfichable Certificats, sélectionnez Compte d’ordinateur, puis Suivant.
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.
Sélectionnez OK pour fermer la boîte de dialogue Ajouter ou supprimer des composants logiciels enfichables .
Dans le volet gauche de MMC, développez le nœud Certificats (ordinateur local).
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.
Dans l’Assistant Importation de certificat, dans la page d’accueil , sélectionnez Suivant.
Dans la page Fichier à importer , sélectionnez Parcourir.
Accédez à l’emplacement du fichier de certificat caCert.cer , sélectionnez le fichier, puis sélectionnez Ouvrir.
Dans la page Fichier à importer , sélectionnez Suivant.
Dans la page Magasin de certificats, acceptez la sélection par défaut, puis sélectionnez Suivant.
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 :
- Chiffrement et validation de certificats chez Microsoft. Data.SqlClient
- Chiffrement et validation de certificat dans le OLE DB Driver pour SQL Server
- Mots-clés et attributs DSN et de chaîne de connexion pour le pilote ODBC pour SQL Server
- Connexion avec chiffrement à l’aide du pilote JDBC Microsoft pour SQL Server
- Utiliser le chiffrement sans validation dans SQL Server Native Client (client hérité)
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=Optionalpour une chaîne de fournisseur OLE DB,Use Encryption for Data=Optionalpour OLE DB ADO ouIDataInitialize,Encrypt=nopour ODBC etEncrypt=FalsepourMicrosoft.Data.SqlClientou 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.