Java连接MSSQL数据库遇到the server selected protocol version tls10 is not accepted by client preferences [tls12]处理

2021-11-25 16点热度 0人点赞 0条评论

问题描述

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应用,就生效了!

admin

这个人很懒,什么都没留下

文章评论

*

code