从Azure网站连接VM Role中的数据库时,“证书链是由不可信的机构颁发的”


189

从Azure网站连接处于VM角色(我具有SQL VM角色)的MY DB时遇到错误。VM角色和Azure网站都在西部区域。我面临以下问题:

SqlException(0x80131904):已成功与服务器建立连接,但是在登录过程中发生错误。(提供者:SSL提供者,错误:0-证书链是由不受信任的颁发机构颁发的。)]

我可以使用SSMS连接到我的数据库。我的VM角色上打开了1433端口。我的连接有什么问题?

Answers:


365

您可能没有在SQL VM的受信任根存储中安装CA签名证书。

如果Encrypt=True在连接字符串中,请将其设置为关闭(不建议),或在连接字符串中添加以下内容:

TrustServerCertificate=True

如果您不安装要使用的证书,SQL Server将创建一个自签名证书,但是由于它不是CA签名的,因此调用者将不会信任它,除非您通过以下方式告诉连接字符串信任任何服务器证书:默认。

从长远来看,我建议利用“ 让我们加密”免费从已知的可信CA获取CA签名证书,然后将其安装在VM上。不要忘记将其设置为自动刷新。您可以在SQL Server联机丛书的“加密层次结构”和“使用未经验证的加密”主题下阅读有关此主题的更多信息。


1
抱歉,我在连接字符串中设置了TTrusted_Connection = False。将其设置为真对我而言有效。仍然
感谢Than

1
@ZafarYousafi,您应将此答案标记为正确。
Termato 2014年

5
建议您不要设置TrustServerCertificatetrue-禁用证书检查。这无非就是设置Encryptfalse
马特·托马斯

5
在此答案中给出的“ TrustServerCertificate = True”建议可能会使问题消失,但这是可怕的建议。解决原因,而不是症状。建议安装CA签名证书的答案的另一部分是解决方法。
米奇·麦德

在较新版本的SSMS中,您可以在“连接属性”选项卡中找到一个名为“信任服务器证书”的小选项。检查该男孩与上面列出的命令具有相同的效果。
gwynbleidd

83

如果您使用的是SQL Management Studio,请转到连接属性,然后单击“通过信任的服务器” 如果您使用的是SQL Management Studio,请转到连接属性,然后单击“通过信任的服务器”


18
这本身不是一个坏建议。我想说的是,当您需要连接到开发服务器并完成工作(例如编码)时,可以使用它。作为软件开发人员,我一直与DevOps纠缠不清,后者没有时间快速修复问题,而且我不能浪费宝贵的时间按时完成任务。称量数据暴露关闭此选项取决于您的环境,无论它是本地的还是远程的,管理员如何设置它,IP限制,并且可以通过其他解决方法轻松缓解。如果没有一些有关基础架构的信息,您不能说这是一个坏建议。
OrizG

你刚刚救了我的一天。感谢@ ct.tan
Milinda Wickramasinghe

@OrizG我在本地计算机上安装了SQL Server,并将其用于个人项目。目前,我不想花一分钱,所以我给自己一个免费的主机,并尝试对服务器进行配置,以便我对证书进行签名,并在服务器和客户端之间交换证书。将用于访问它。但是,由于有免费主机,所以我无法通过“让我们加密”来做到这一点。与使用受信任的CA签名证书正确进行证书交换相比,此解决方案的缺点到底是什么?
ccoutinho

31

如果尝试使用SSMS进行连接时看到此错误消息,请添加TrustServerCertificate=True到“其他连接参数”。


23
米奇,您对这个问题的三个答案也发表了同样的评论。如果您提供了一些实质性的信息或链接来说明为什么这是“真正非常糟糕的建议”,则可能对其他读者有帮助。

@Shoeless对已接受答案的一些评论进行了解释。
汤姆·布洛杰特'18

4

如果您尝试通过Visual Studio 2015中的数据连接访问它,并遇到上述错误,请转到“高级”并设置 TrustServerCertificate=True 错误消失。


9
这本身不是一个坏建议。我想说的是,当您需要连接到开发服务器并完成工作(例如编码)时,可以使用它。作为软件开发人员,我一直与DevOps纠缠不清,后者没有时间快速修复问题,而且我不能浪费宝贵的时间按时完成任务。称量数据暴露关闭此选项取决于您的环境,无论它是本地的还是远程的,管理员如何设置它,IP限制,并且可以通过其他解决方法轻松缓解。如果没有一些有关基础架构的信息,您不能说这是一个坏建议。
OrizG

1

从IIS访问SQLServer时遇到相同的问题。添加TrustServerCertificate = True没有帮助。

在MS docs中可能会看到一条注释:确保SQLServer服务帐户有权访问您正在使用的TLS证书。(NT服务\ MSSQLSERVER)

打开个人商店,然后右键单击证书->管理私钥->添加SQL服务帐户并完全控制。

重新启动SQL服务。有效。


0

可以从ssms客户端本身实现相同的目的。只需打开ssms,插入服务器名称,然后从标题连接属性下的选项中确保已选中“信任服务器证书”。



0

即使我的连接已选中“信任服务器”证书,并且TrustServerCertificate=True在“高级”部分中添加了内容,我仍试图运行探查器时遇到此错误。我更改为以管理员身份运行的SSMS实例,并且探查器启动时没有问题。(我以前发现,即使我与本地的连接都花了很长时间才能连接,但以管理员身份运行有助于)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.