在Sql Server连接字符串中使用Encrypt = yes - >"provider:SSL Provider,error:0 - 证书的CN名称与传递的值不匹配."

Chr*_*ris 12 c# sql sql-server ssl sql-server-2005

Encrypt=yes在SQL Server连接字符串中使用,因为我需要加密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.)
Run Code Online (Sandbox Code Playgroud)

有任何建议如何解决这个问题?我假设我的服务器之间需要某种证书关系,但不知道从哪里开始.

我需要两个连接,一个连接到SQL 2000服务器,一个连接到2005服务器.

Ger*_*rre 25

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

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

"[...];Encrypt=True;TrustServerCertificate=True"
Run Code Online (Sandbox Code Playgroud)

  • 确实.次要添加:从.NET Framework 4.5开始,当**TrustServerCertificate**为false且**Encrypt**为true时,SQL Server SSL证书中的服务器名称(或IP地址)必须与服务器名称完全匹配(或连接字符串中指定的IP地址).否则,连接尝试将失败.[更多信息,请访问MSDN](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v = vs.110).aspx) (4认同)
  • 不要在LIVE中设置trustServerCertificate = true.你可以使用另一个连接属性````hostNameInCertificate"```.请参考[此Microsoft Doc](https://docs.microsoft.com/en-us/sql/connect/jdbc/connecting-with-ssl-encryption) (4认同)
  • 使用本机客户端 11.0 驱动程序,我必须使用“yes”而不是“true”。 (2认同)

Vor*_*t3x 7

我意识到这已经很老了,但是认为这可能仍然对某人有所帮助.

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

我最近读过这篇文章,但我仍在努力为你找到这个链接.我建议你确保你连接的服务器已经明确安装了证书,并且你的客户端也有.

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

  • 我很欣赏我参加派对有点晚了,但是如果有人仍然需要这些信息的来源,他们可以去这里https://technet.microsoft.com/en-us/library/ms189067(v=sql.105 )的.aspx (3认同)