问题描述
JSK1.8以上的Java应用(如SpringBoot/SpringWeb等)连接MSSQL(也可能是MSSQL Server的版本比较旧),发现无法链接,报错如下:
The server selected protocol version TLS10 is not accepted by client preferences TLS12 com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
原因是JDK新版本禁用了安全性较差的TLS10,而SQLServer还在使用这个TLS协议,不过可以修改JDK的安全性设置。
问题解决
找到JDK下的JRE的这个文件:java.security
- Windows的路径可能是:C:\Program Files (x86)\Java\jdk1.8.0_291\jre\lib\security\java.security
- Linux下的路径可能是:/usr/java/jdk1.8.0_291/jre/lib/security/java.security (或者是/usr/java/default/jre/lib/security/java.security,default就是一个指向最新版本的link快捷方式)
编辑这个java.security文件,找到如下jdk.tls.disabledAlgorithms:
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
把TLSv1删除(当然也要顺带删除后面的逗号),变成如下:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1.1, RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \ include jdk.disabled.namedCurves
或者把这三行前面都加#注释掉,也是可以的
不需要重启服务器,只需要重启Java应用,就生效了!
文章评论