现象
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
|
删除后重启项目即可