Java 11.0.9连接MySQL 5.6时AWS EC2 Linux服务器出现SSLHandshakeException问题求助
解决Java 11 + MySQL 5.6在AWS EC2上的SSL握手异常
我之前也碰到过一模一样的问题!这本质是Java 11和MySQL 5.6之间的TLS协议兼容问题——Java 11默认禁用了TLSv1.0和TLSv1.1这些旧协议,但MySQL 5.6默认依赖这些协议建立SSL连接,而你的本地环境可能悄悄调整过配置,所以没出问题。下面给你几个靠谱的解决办法:
方法1:修改JDBC连接URL(快速验证)
直接在你的数据库连接URL里添加enabledTLSProtocols参数,强制驱动使用兼容的旧协议:
jdbc:mysql://your-db-host:3306/your-db-name?useSSL=true&enabledTLSProtocols=TLSv1,TLSv1.1
这个方法最快捷,不需要修改服务器配置,重启应用就能生效,适合快速验证问题根源。
方法2:调整Java安全配置(全局生效)
如果需要让EC2上的所有Java应用都兼容旧协议,可以修改Java的安全配置文件:
- 找到EC2上Java 11安装目录下的
conf/security/java.security文件(通常路径类似/usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security) - 找到
jdk.tls.disabledAlgorithms这一行,把其中的TLSv1和TLSv1.1从禁用列表中移除
比如原来的配置可能是:
修改后变成:jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, ...jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, ... - 重启你的Java应用,让配置生效
⚠️ 注意:这个修改会影响EC2上所有使用该JVM的应用,如果你还有其他服务运行在同一个JVM下,要确认它们也能兼容启用这些旧协议。
方法3:升级MySQL版本(长期最优方案)
MySQL 5.6已经在2021年停止了官方维护,不仅存在安全隐患,还会越来越多地碰到这类兼容性问题。建议你升级到MySQL 5.7或8.0版本,这些版本默认支持TLSv1.2及以上协议,和Java 11的默认安全配置完美兼容,从根本上解决这类问题。
你可以先试试方法1,确认问题解决后,再考虑长期的升级方案。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

