我有一个 Windows Server 2012 R2,它是一个带有 SQL Server 2014 (Express) 的 DC,更新到带有 CU10 12.2.5571.0(测试环境)的最新 SP2。我通过在路径中设置注册表项禁用了除TLS1.1和TLS1.2之外的所有协议:
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
.
我最初只启用了 TLS1.2,但我还需要 TLS1.1 以向后兼容在同一域的另一台机器上运行的 Java 应用程序。为了使用 TLS1.2,需要特定的 JDBC 驱动程序,并且必须为 JDBC url 提供一个属性(请参阅此处的讨论)。
同时我想让应用程序与 TLS1.1 一起工作,所以我重新启用了它。但是,应用程序无法连接到数据库,SQL Server 似乎没有使用 TLS1.1。为了测试连接,我尝试了以下命令:
1)openssl s_client -connect <Server IP>:1433 -ssl3
2)openssl s_client -connect <Server IP>:1433 -tls1_1
3)openssl s_client -connect <Server IP>:1433 -tls_1_2
测试 1) 按预期失败(握手失败),而测试 2) 需要一些时间(大约 30 秒或更长时间)才能产生成功的响应。测试 3) 按预期产生了成功的输出。
我还尝试在客户端计算机上使用 Management Studio,并且只有在客户端和服务器上都启用了 TLS1.2 时连接才有效。否则,如果仅启用 TLS1.1,则会显示以下错误:
与服务器成功建立连接,但在登录过程中出现错误。(提供者:SSL Provider,错误:0 - 客户端和服务器无法通信,因为它们没有共同的算法。)
怎么可能?
我是否需要在安全通道上强制执行某些操作?
为什么 SQL Server 不再允许 TLS1.1 连接?
协议与算法不同。
无论您如何配置 SQL Server,操作系统都必须允许协议并支持算法。
有关更多信息,请阅读: https ://blogs.msdn.microsoft.com/sql_protocols/2007/06/29/ssl-cipher-suites-used-with-sql-server/
您可以在此处找到有关 SSL 主题的最佳实践的更多信息 https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices
如果您不喜欢摆弄 Windows 的注册表,您可以使用 Nartact 免费工具IIS Crypto来配置您的 Windows 服务器。IIS 部分无关紧要。这个工具实际上配置了操作系统。
我验证了为了使用协议 TLS1.1,必须设置以下键:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server
注意:更改这些密钥后,重新启动机器,以便重置安全通道连接。
如果禁用 SHA 哈希或 TLS 1.0 协议,则 TLS 1.1 协议会因未知原因停止工作。