java - 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/
请分享您可能针对类似问题实施的建议或意见。
谢谢,尼维迪塔
解决方案
您是否尝试过微软文章选项 2 中提到的注册表更改?
- 禁用 DHE 密码套件:
警告:如果您不正确地使用注册表编辑器,您可能会导致严重的问题,可能需要您重新安装操作系统。Microsoft 不能保证您可以解决因错误使用注册表编辑器而导致的问题。使用注册表编辑器需要您自担风险。
- 打开注册表编辑器。
- 通过导航到以下注册表位置访问密钥交换算法设置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms
- 选择 Diffie-Hellman 子键(如果不存在,则创建它)。
- 将 Enabled DWORD 注册表值设置为 0(如果不存在,则创建它)。
- 退出注册表编辑器。
变通办法的影响:除非已实施替代故障转移选项,否则依赖于 DHE 密钥的加密 TLS 会话将不再起作用。
https://technet.microsoft.com/en-us/library/security/ms15-055.aspx
推荐阅读
- batch-file - 如何使用批处理将文件中的旧文本替换为新输入?
- oracle - 如何使用 plsql 返回多列
- php - 在 codeigniter (dmY) 中输入日期
- python - Tkinter 对象的“ID”和“标签”之间的区别
- jquery - cPanel Css 警报
- pyspark - Sagemaker PySpark:内核死机
- asp.net-core - 如何在 asp.et core 中获取 IFormFile / FormFile 对象
- java - java中的正则表达式匹配和替换
- java - AbstractQueuedSynchronizer 条目的 acquireQueued 方法何时会最终阻塞?
- codenameone - Codenameone - 表格上的透明度或样式问题