为什么Java在最新的JDK更新后不能连接到MySQL 5.7,应该如何修复?(ssl.SSLHandshakeException:没有合适的协议)
在2021年4月对JDK的最新更新中()支持并被删除,可能是因为自2021年3月以来不再支持这些版本。文件中的差异可以明显看出这一点:11.0.11+9-0ubuntu2~18.04
TLSv1
TLSv1.1
java.security
以前:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves
后:
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
这也在这篇SO帖子中进行了讨论: SSLHandShakeException No Appropriate Protocol 。在该线程中,自更新JDK版本以来的最后几天还会弹出更多答案。
在此更新 JDK 后,我们收到错误
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
跟。c3p0
切换到后,我们得到了一个更有意义的错误:hikari
ERROR [2021-04-29 16:21:16,426] com.zaxxer.hikari.pool.HikariPool: HikariPool-1 - Exception during pool initialization.
! javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
我们在MySQL上运行。现在,根据我的理解,如上所述,MySQL 5.7支持TLSv1.2。此外,在运行时,我们得到哪个建议是支持的。5.7.33-0ubuntu0.18.04.1
SHOW VARIABLES LIKE 'tls_version';
TLSv1,TLSv1.1,TLSv1.2
TLSv1.2
那么问题来了,为什么JDK和MySQL不就使用达成一致,我们能做些什么来让他们与之通信?TLSv1.2
TLSv1.2
注意:我不认为按照其他线程中的建议更改文件是解决此问题的良好长期解决方案!java.security