首页 > 解决方案 > SQL 连接异常 - 驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接

问题描述

我们观察到 SQL Server 连接被丢弃并出现以下错误:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“SQL Server 返回不完整的响应。连接已关闭。ClientConnectionId:b928e7b0-689b-40f8-be3e-158261d0a84a”。

原因:com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接。错误:“SQL Server 返回不完整的响应。连接已关闭。ClientConnectionId:b928e7b0-689b-40f8-be3e-158261d0a84a”

我们在我们的应用程序中使用 sqljdbc42.jar,MSSQL Server 是 MS SQL SERVER 2014 SP3 java 版本是 1.8

我们无法设置为 TLSv1,如此处的解决方案之一所述SQL Server JDBC Error on Java 8: The driver could not build an secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption,因为依赖的应用程序需要 TLSv2去工作。

按照微软的说法,jdbc 4.2 jar 应该可以解决它,但我们已经在上面了。https://blogs.msdn.microsoft.com/dataaccesstechnologies/2016/11/30/intermittent-jdbc-connectivity-issue-the-driver-could-not-establish-a-secure-connection-to-sql-server-通过-使用-安全-套接字-层-ssl-加密-错误-sql-server-returned-an-incomplete-respons/

请分享您可能针对类似问题实施的建议或意见。

谢谢,尼维迪塔

标签: javajdbcjava-8

解决方案


您是否尝试过微软文章选项 2 中提到的注册表更改?

  • 禁用 DHE 密码套件:

警告:如果您不正确地使用注册表编辑器,您可能会导致严重的问题,可能需要您重新安装操作系统。Microsoft 不能保证您可以解决因错误使用注册表编辑器而导致的问题。使用注册表编辑器需要您自担风险。

  1. 打开注册表编辑器。
  2. 通过导航到以下注册表位置访问密钥交换算法设置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms
  3. 选择 Diffie-Hellman 子键(如果不存在,则创建它)。
  4. 将 Enabled DWORD 注册表值设置为 0(如果不存在,则创建它)。
  5. 退出注册表编辑器。

变通办法的影响:除非已实施替代故障转移选项,否则依赖于 DHE 密钥的加密 TLS 会话将不再起作用。

https://technet.microsoft.com/en-us/library/security/ms15-055.aspx


推荐阅读