我使用C#(框架4.6)编写的应用程序使用System.Data.SqlClient
与SQL Server 2014进行通信。此应用程序不使用SSL连接到SQL。
与SQL Server的连接失败,并显示以下错误:
已建立连接但是...协议错误...打开 会话(SSL提供程序错误0)
在服务器上,我观察到事件:Schannel错误36874和36888(从远程客户端应用程序收到TLS1.2连接请求,但服务器不支持客户端应用程序支持的密码套件。 )
我试图在连接字符串中强制encrypt=false
禁用任何SSL选项,但这并不能解决问题。
在同一网络的所有计算机上都不会发生此错误。
提前感谢您的帮助。
亲切的问候,
盖
答案 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。
我们的修复要点是检查这些设置:
[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或删除键。