运行环境:

  • java1.8
  • sqlserver 2008
  • 连接驱动:mssql-jdbc:8.4.0.jre8
  • 连接池druid
  • 持久层框架mybatis
  • Windows10

错误信息

在项目启动加载连接池时没有错误,调用接口执行SQL时抛出以下错误:

2020-08-18 16:10:38.116 ERROR 9936 --- [reate-477535705] com.alibaba.druid.pool.DruidDataSource   : create connection SQLException, url: jdbc:sqlserver://10.135.0.135:1433;DatabaseName=fwusercount;, errorCode 0, state 08S01

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭。 ClientConnectionId:e613447d-8c3a-4450-9055-2195edd7d514”。
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2924) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1881) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2484) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2142) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1993) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1164) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:760) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1643) ~[druid-1.1.20.jar:1.1.20]
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1709) ~[druid-1.1.20.jar:1.1.20]
	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2715) ~[druid-1.1.20.jar:1.1.20]
Caused by: java.io.IOException: SQL Server 未返回响应。连接已关闭。 ClientConnectionId:e613447d-8c3a-4450-9055-2195edd7d514
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:790) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:840) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:833) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1003) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:993) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) ~[na:1.8.0_241]
	at sun.security.ssl.InputRecord.read(InputRecord.java:503) ~[na:1.8.0_241]
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975) ~[na:1.8.0_241]
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367) ~[na:1.8.0_241]
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395) ~[na:1.8.0_241]
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379) ~[na:1.8.0_241]
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1799) ~[mssql-jdbc-7.4.1.jre8.jar:na]
	... 8 common frames omitted

解决方案

在Java的安装目录的\jre\lib\security下,打开并编辑java.security文件,我本地是C:\Program Files\Java\jdk1.8.0_241\jre\lib\security\java.security

打开文件后,修改jdk.tls.disabledAlgorithms这一项,去掉3DES_EDE_CBC,字符。然后重新启动项目,调用数据库执行SQL就没问题了

更多推荐

解决com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL