关于springboot项目启动时jdk11 提示jdk.tls.client.protocols: TLSv1.0 is not a supported SSL protocol name
错误提示:errorCode 0, state 08S01
出现原因:在连接低版本sql server 提示这个错误,数据库服务器只支持 TLS 1.0,而 Java 客户端默认禁用了它。在 Java 8u292 及以上版本中,为了提高安全性,JRE 默认在 jdk.tls.disabledAlgorithms 配置项中主动禁用了 TLS 1.0 和 TLS 1.1 协议。而较老版本的 SQL Server(如 2008、2012、2014 版本)在进行加密登录时,首选协议往往是 TLS 1.0。当双方协议版本无法达成一致时,SQL Server 便会主动断开连接(Connection Reset),JDBC 驱动随即抛出 08S01 错误。
1.IDEA中JVM参数-Djdk.tls.client.protocols=TLSv1,TLSv1.1,TLSv1.2无法解决该问题,原因从 JDK 8u292 / JDK 11.0.11 开始,受安全合规要求驱动,底层 java.security 策略的优先级高于 jdk.tls.client.protocols 动态参数,即使配置了后者,TLSv1 仍会被强制拦截。
2.修改 JDK 安全策略文件(根治)
此方案会永久修改 JDK 的安全策略,允许所有基于该 JDK 的应用使用 TLS 1.0。
-
找到
java.security文件:-
Java 8:
$JAVA_HOME/jre/lib/security/java.security -
Java 11 及以上:
$JAVA_HOME/conf/security/java.security
-
找到这串代码,把 TLSv1, TLSv1.1删除,关闭所有的java进程,重新启动。
#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, \
jdk.tls.disabledAlgorithms=SSLv3, DTLSv1.0, RC4, DES, \
MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, ECDH, \
include jdk.disabled.namedCurves
更多推荐


所有评论(0)