jdbc SQLServer Error: “The server selected protocol version TLS10

最近在尝试在SQL Server 环境下开发新项目,遇到了一些坑,记录一下。

报错信息

com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS12]". ClientConnectionId:a014cd02-1796-4171-9ca1-5ba2e2f6fcf5
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2670)
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1837)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2257)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1921)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1762)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1077)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:623)

解决思路

在JDK 8及更早版本中,编辑该 /lib/security/java.security文件并3DES_EDE_CBC从jdk.tls.legacyAlgorithms安全属性中删除。
官方文档指出:请注意,这是一个低风险的更改。它不太可能导致回归,因为它只会影响协商算法的顺序。如果没有其他非遗留算法可用,则仍将使用3DES(如果在遗留算法列表上列出)。

把jdk下面的java.security中的,去掉 3DES_EDE_CBC 可以使用jdbc连上sqlserver。

解决办法

找到你的jre目录,比如我这里是
修改:

jdk1.8.0_331/jre/lib/security/java.security

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

修改为:

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024,
EC keySize < 224, DES40_CBC, RC4_40

参考:
https://blog.csdn.net/theminer/article/details/122619655

猜你喜欢

转载自blog.csdn.net/lxyoucan/article/details/125681677