Sqlconnection仍然需要ssl但“encrypt = false”

时间:2016-11-30 14:16:03

标签: c# sql sql-server ssl

我使用C#(框架4.6)编写的应用程序使用System.Data.SqlClient与SQL Server 2014进行通信。此应用程序不使用SSL连接到SQL。

与SQL Server的连接失败,并显示以下错误:

  

已建立连接但是...协议错误...打开   会话(SSL提供程序错误0)

在服务器上,我观察到事件:Schannel错误36874和36888(从远程客户端应用程序收到TLS1.2连接请求,但服务器不支持客户端应用程序支持的密码套件。 )

我试图在连接字符串中强制encrypt=false禁用任何SSL选项,但这并不能解决问题。

在同一网络的所有计算机上都不会发生此错误。

提前感谢您的帮助。

亲切的问候,

2 个答案:

答案 0 :(得分:1)

我们已找到解决此问题的方案。我们需要在注册表中添加新闻密钥。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000001
"Enabled"=dword:00000000

重新启动计算机后,问题解决但我们不明白为什么有些计算机会连接tls 1.2

答案 1 :(得分:0)

您可能需要检查打开与SQL Server连接的计算机的注册表设置。有一个鲜为人知的编辑可以强制所有连接都是TLS 1.2。

Registry information

我们的修复要点是检查这些设置:

  

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319]   " SchUseStrongCrypto" = DWORD:00000001

     

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft.NETFramework \ v4.0.30319]   " SchUseStrongCrypto" = DWORD:00000001

如果要启用它,请按原样使用。如果要禁用它们,可以将其设置为0或删除键。