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

时间:2010-09-09 06:02:49

标签: c# sql sql-server sql-server-2005 ssl

我在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服务器。

3 个答案:

答案 0 :(得分:24)

您的数据库连接可以配置为加密流量,并从服务器配置为接受任何证书。不是一个伟大的解决方案,但它对我有用。

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

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

答案 1 :(得分:7)

我意识到这已经很老了,但是认为这可能仍然有助于某人。

如果要连接的服务器未安装证书,则每次重新启动服务器时都会生成默认证书编号。发生这种情况时,CN编号会发生变化,可能与您的编号不一致。

我最近读了这篇文章,但我仍在尝试为你找到这个链接。 我建议你确保你连接的服务器已经明确安装了证书,并且你的客户也有。[/ p>

我会在找到链接后立即更新。

答案 2 :(得分:0)

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

您的选择是:

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

Certificate Management (SQL Server Configuration Manager)

b) 如果您无法在 SQL Server 上安装真正的证书(几美元/年)。您可以颁发自签名证书并信任客户端计算机上的此特定证书。

c) 如果你真的想忽略这个安全问题。 请不要这样做您可以选择向连接字符串添加“忽略此安全警告标志”(TrustServerCertificate):

Encrypt=Yes;TrustServerCertificate=Yes

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

Encrypt=Yes;hostNameInCertificate=<myservername>