Java11连接SqlServer问题

现象

Java项目升级到jdk11后链接SqlServer时报如下错误:

1
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

之前在老版本的java上没有此异常。此时的java版本是11.0.20,之前的java版本为1.8.0_151

原因

经查询一些文档后,发现java从1.8(291)开始,禁用了一些老的加密算法,如TLSv1、TLSv1.1等,而要连接的SqlServer的版本需要用这些算法。

解决

修改java.security文件,删除掉TLSv1、TLSv1.1

注意:java版本不同,其文件所在的目录位置也有一定不同。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
###编辑java.security文件
vim $JAVA_HOME/conf/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, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

删除后重启项目即可

Buy me a coffee
支付宝
微信
0%