«La chaîne de certificats a été émise par une autorité non approuvée» lors de la connexion de la base de données dans le rôle de machine virtuelle à partir du site Web Azure

192

Je rencontre une erreur lors de la connexion de MY DB qui est dans le rôle de machine virtuelle (j'ai un rôle de machine virtuelle SQL) à partir du site Web Azure. Le rôle de machine virtuelle et le site Web Azure se trouvent dans la zone Ouest. Je suis confronté au problème suivant:

SqlException (0x80131904): Une connexion a été établie avec succès avec le serveur, mais une erreur s'est produite pendant le processus de connexion. (fournisseur: fournisseur SSL, erreur: 0 - La chaîne de certificats a été émise par une autorité non approuvée.)]

Je peux me connecter à ma base de données en utilisant SSMS. Le port 1433 est ouvert sur mon rôle de VM. Quel est le problème avec ma connexion?

ZafarYousafi
la source

Réponses:

367

Vous n'avez probablement pas de certificat signé par l'autorité de certification installé dans le magasin racine de confiance de votre machine virtuelle SQL.

Si vous en avez Encrypt=Truedans la chaîne de connexion, désactivez-la (non recommandé) ou ajoutez ce qui suit dans la chaîne de connexion:

TrustServerCertificate=True

SQL Server créera un certificat auto-signé si vous n'en installez pas un pour qu'il l'utilise, mais il ne sera pas approuvé par l'appelant car il n'est pas signé par une autorité de certification, sauf si vous indiquez à la chaîne de connexion de faire confiance à tout certificat de serveur en défaut.

À long terme, je recommanderais de tirer parti de Let's Encrypt pour obtenir gratuitement un certificat signé par une autorité de certification de confiance connue et de l'installer sur la machine virtuelle. N'oubliez pas de le configurer pour qu'il s'actualise automatiquement. Vous pouvez en savoir plus sur ce sujet dans les manuels SQL Server en ligne sous les rubriques «Hiérarchie de chiffrement» et «Utilisation du chiffrement sans validation».

Thiago Silva
la source
1
désolé mon mauvais, TTrusted_Connection = False a été défini dans la chaîne de connexion. le définir vrai fonctionne pour moi. Merci quand même
ZafarYousafi
1
@ZafarYousafi vous devez marquer cette réponse comme correcte.
Termato
5
Il n'est pas bon de conseiller de régler TrustServerCertificatesur - truecela désactive la vérification des certificats. Ce n'est pas mieux que de la mise Encryptà false!
Matt Thomas
5
Le conseil donné "TrustServerCertificate = True" dans cette réponse peut faire disparaître le problème, mais c'est un conseil terrible. Corrigez la cause, PAS les symptômes. L'autre partie de la réponse suggérant l'installation d'un certificat signé CA est la voie à suivre.
Mitch Wheat
Dans les versions plus récentes de SSMS, vous trouverez une petite option appelée "Certificat de serveur de confiance" dans l'onglet "Propriétés de connexion". Vérifier ce garçon a le même effet que les commandes listées ci-dessus.
gwynbleidd
87

Si vous utilisez SQL Management Studio, accédez aux propriétés de connexion et cliquez sur "Trust server certificate" Si vous utilisez SQL Management Studio, accédez aux propriétés de connexion et cliquez sur "Trust server certificate"

ct.tan
la source
18
Ce n'est pas un mauvais conseil en soi. Je dirais que vous pouvez l'utiliser lorsque vous devez vous connecter à un serveur de développement et faire votre travail, comme le codage. En tant que développeur de logiciels, je lutte constamment avec DevOps qui n'a pas le temps de réparer les choses rapidement et je ne peux pas me permettre de perdre un temps précieux par rapport aux délais. La pesée de l'exposition des données à désactiver cette option dépend en grande partie de votre environnement, s'il est local ou distant, comment les administrateurs l'ont configuré, les restrictions IP et cela peut être facilement atténué avec d'autres solutions de contournement. Vous ne pouvez pas dire que c'est un mauvais conseil sans avoir un peu d'informations sur votre infrastructure.
OrizG
Vous venez de sauver ma journée. Merci @ ct.tan
Milinda Wickramasinghe
@OrizG J'ai un serveur SQL installé sur une machine locale et je l'utilise pour des projets personnels. Pour le moment, je ne veux pas dépenser un centime avec cela, alors je me suis procuré un hôte gratuit et j'ai essayé de configurer le serveur de manière à pouvoir signer les certificats et les échanger entre le serveur et les clients. J'utiliserai pour y accéder. Cependant, à cause de l'hôte gratuit, je n'ai pas réussi à le faire avec Let's Encrypt. Quels sont exactement les inconvénients de cette solution, par rapport au fait de procéder correctement à l'échange de certificats, avec des certificats signés par une CA de confiance?
ccoutinho
31

Si vous voyez ce message d'erreur lorsque vous essayez de vous connecter à l'aide de SSMS, ajoutez TrustServerCertificate=Trueaux paramètres de connexion supplémentaires.

vmanne
la source
23
Mitch, vous avez fait ce même commentaire sur trois réponses à cette question. Il pourrait être utile aux autres lecteurs de fournir des informations de fond ou un lien expliquant pourquoi il s’agit d’un «très, très mauvais conseil».
Shoeless
@Shoeless Plusieurs commentaires sur la réponse acceptée expliquent.
Tom Blodget
4

Si vous essayez d'y accéder via les connexions de données dans Visual Studio 2015 et que vous obtenez l'erreur ci-dessus, accédez à Avancé et définissez l' TrustServerCertificate=True erreur disparaître.

Bhavjot
la source
9
Ce n'est pas un mauvais conseil en soi. Je dirais que vous pouvez l'utiliser lorsque vous devez vous connecter à un serveur de développement et faire votre travail, comme le codage. En tant que développeur de logiciels, je lutte constamment avec DevOps qui n'a pas le temps de réparer les choses rapidement et je ne peux pas me permettre de perdre un temps précieux par rapport aux délais. La pesée de l'exposition des données à désactiver cette option dépend en grande partie de votre environnement, s'il est local ou distant, comment les administrateurs l'ont configuré, les restrictions IP et cela peut être facilement atténué avec d'autres solutions de contournement. Vous ne pouvez pas dire que c'est un mauvais conseil sans avoir un peu d'informations sur votre infrastructure.
OrizG
1

J'ai été touché par le même problème lors de l'accès à SQLServer à partir d'IIS. L'ajout de TrustServerCertificate = True n'a pas aidé.

Pourrait voir un commentaire dans MS docs: assurez-vous que le compte de service SQLServer a accès au certificat TLS que vous utilisez. (Service NT \ MSSQLSERVER)

Ouvrez le magasin personnel et faites un clic droit sur le certificat -> gérer les clés privées -> Ajouter le compte de service SQL et donner un contrôle total.

Redémarrez le service SQL. Ça a marché.

Kaavya T
la source
0

La même chose peut être obtenue à partir du client ssms lui-même. Ouvrez simplement le ssms, insérez le nom du serveur, puis à partir des options sous la rubrique Propriétés de connexion, assurez-vous que le certificat du serveur de confiance est coché.

Manas
la source
0

J'ai eu ce problème lors de l'importation de données Excel dans SQLDatabase via SSMS. La solution est de définir TrustServerCertificate = Truedans la section sécurité

Kanna Reddy
la source
0

J'ai rencontré cette erreur en essayant d'exécuter le profileur, même si ma connexion avait vérifié le certificat du serveur de confiance et que j'ai ajouté TrustServerCertificate=Truedans la section avancée. J'ai changé pour une instance de SSMS fonctionnant en tant qu'administrateur et le profileur a démarré sans problème. (J'avais précédemment constaté que lorsque mes connexions, même au niveau local, prenaient beaucoup de temps pour se connecter, courir en tant qu'administrateur aidait).

Facture
la source