在Sql Server连接字符串中使用Encrypt=yes -> "提供程序:SSL提供程序,错误:0 - 证书的CN名称与传递的值不匹配。"

38

我在 SQL Server 连接字符串中使用了 Encrypt=yes,因为我需要将 TCPIP 流量加密,但打开连接时出现错误:

A connection was successfully established with the server, but then an error
occurred during the pre-login handshake. (provider: SSL Provider, error: 0 -
The certificate's CN name does not match the passed value.)

你有没有任何建议可以修复这个问题?我猜我需要在我的服务器之间建立某种证书关系,但是我不知道从哪里开始。

我需要这个解决方案与两个连接一起使用,一个连接到 SQL 2000 服务器,另一个连接到 2005 服务器。

4个回答

69

您可以配置数据库连接以加密流量并接受服务器上的任何证书。虽然不是理想的解决方案,但它对我很有效。

生成的连接字符串应如下所示:

"[...];Encrypt=True;TrustServerCertificate=True"

10
确实。一个小的补充:从.NET Framework 4.5开始,当 TrustServerCertificate 为false且 Encrypt 为true时,SQL Server SSL证书中的服务器名称(或IP地址)必须与连接字符串中指定的服务器名称(或IP地址)完全匹配。否则,连接尝试将失败。更多信息请参见MSDN - Juliën
20
永远不要在生产环境中将trustServerCertificate设置为true。还有另一个连接属性"hostNameInCertificate"可供使用。请参考此Microsoft文档。 - Sunil Singhal
2
使用本地客户端11.0驱动程序时,我必须使用“yes”而不是“true”。 - vic

12

我知道这篇文章比较古老,但我认为仍然有助于某些人。

如果您连接的服务器没有安装证书,则每次重新启动服务器时都会生成一个默认证书编号。当发生这种情况时,CN号码会更改,可能与您拥有的不匹配。

我最近读到了这篇文章,但我还在试图为您找到链接。 我建议您确保您连接的服务器已明确安装了证书,并且您的客户端也有它。

我一旦找到链接就会更新此内容。


5
我知道我来晚了,但如果还有人需要那个信息的来源,可以在这里找到:https://technet.microsoft.com/zh-cn/library/ms189067(v=sql.105).aspx - Ceisc

4

如果没有在服务器上安装证书,那么无法对连接进行加密。默认情况下,SQL Server会提供一个自签名证书,但客户端会拒绝(并且应该拒绝)这个证书。

您有以下几个选项:

a) 解决方案是在SQL Server上安装真实的证书:

证书管理(SQL Server配置管理器)

b) 如果您无法在SQL Server上安装真实的证书(每年几美元)。您可以发行一个自签名证书,并信任该特定证书在您的客户机上。

c) 如果您确实想忽略这个安全问题。请不要这样做,您可以选择在连接字符串中添加一个“忽略此安全警告标志”(TrustServerCertificate)。

Encrypt=Yes;TrustServerCertificate=Yes

(添加于2023-07-27) 如果您正在使用SQL Server版本18.x或更新版本的ODBC驱动程序:

Encrypt=Yes;hostNameInCertificate=<myservername>

d) 如果您使用的是JDBC,可以使用附加的连接字符串属性来替代TrustServerCertificate

Encrypt=Yes;hostNameInCertificate=<myservername>

真实证书,你能详细说明一下你的意思吗? - Martin
来自受信任的证书颁发机构(如LetsEncypt、Comodo、DigiSign等)的证书。 - Henrik Høyer
啊,一个公共CA。明白了,谢谢。 - Martin

0
请注意,如果SQL服务器是组织良好的域的一部分,则不需要公共CA。Windows活动目录证书服务也可以用于向域上的机器颁发证书。结合组策略,您还可以确保域上的所有服务器都获得根证书(即根证书自动放置在“受信任的根证书颁发机构”中)。这比“自签名”证书更好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接