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