You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8连接MySQL 8.0.37 SSL握手失败问题求助

解决MySQL强制SSL连接的SSLHandshakeException问题

一、确认证书导入的有效性

  • 检查导入证书类型:必须是MySQL服务器的CA根证书/自签服务器证书,而非客户端证书。执行以下命令验证证书是否存在于Tomcat实际使用的JDK密钥库中:
    keytool -list -keystore ${TOMCAT_JAVA_HOME}/jre/lib/security/cacerts -alias mysql-ssl-cert
    
    (替换${TOMCAT_JAVA_HOME}为Tomcat启动参数中指定的JDK路径,默认密钥库密码为changeit)
  • 核对密钥库路径:避免误导入系统默认JDK的cacerts,通过ps aux | grep tomcat查看Tomcat启动时的JAVA_HOME参数,对应路径下的cacerts才是生效的。

二、修正JDBC连接串配置

根据MySQL JDBC驱动版本调整参数:

  • MySQL Connector/J 5.1.x版本:
    jdbc:mysql://db-host:3306/db-name?useSSL=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:///${TOMCAT_JAVA_HOME}/jre/lib/security/cacerts&trustCertificateKeyStorePassword=changeit
    
    (直接指定密钥库路径,避免默认配置的不确定性)
  • MySQL Connector/J 8.0.x版本:
    jdbc:mysql://db-host:3306/db-name?sslMode=VERIFY_CA&trustCertificateKeyStoreUrl=file:///${TOMCAT_JAVA_HOME}/jre/lib/security/cacerts&trustCertificateKeyStorePassword=changeit
    
  • 排查冲突配置:检查Tomcat的context.xml数据源配置、项目配置文件(如application.properties/yaml)中是否存在useSSL=false之类的参数,覆盖了强制SSL的设置。

三、分析SSL调试日志的关键报错

从日志中定位SSLHandshakeException的具体子原因,针对性解决:

  • 报错:unable to find valid certification path to requested target:
    说明Java无法信任MySQL服务器的证书。确认导入的证书是完整链(CA签发需导入根CA证书,自签则导入服务器证书),且证书未过期。
  • 报错:No appropriate protocol (protocol is disabled or cipher suites are inappropriate):
    Java 8u201默认禁用TLSv1.0/TLSv1.1,若MySQL仅开启旧版本协议,需指定兼容协议:
    • 在JDBC连接串添加:enabledTLSProtocols=TLSv1.2
    • 或在Tomcat启动参数中添加:-Djdk.tls.client.protocols=TLSv1.2

四、验证MySQL服务器端SSL配置

  • 确认MySQL已强制SSL:登录MySQL执行SHOW VARIABLES LIKE '%ssl%';,确保have_ssl=YES且require_secure_transport=ON。若未开启,修改my.cnf(或my.ini)添加:
    require_secure_transport=ON
    ssl_ca=/path/to/ca.pem
    ssl_cert=/path/to/server-cert.pem
    ssl_key=/path/to/server-key.pem
    
    重启MySQL服务。
  • 确认数据库用户要求SSL:执行SHOW GRANTS FOR 'your-user'@'app-server-ip';,确保权限包含REQUIRE SSL,若没有则执行:
    GRANT ALL ON your-db.* TO 'your-user'@'app-server-ip' REQUIRE SSL;
    FLUSH PRIVILEGES;
    

五、升级MySQL JDBC驱动版本

Java 8u201搭配旧版驱动可能存在兼容性问题,建议升级到:

  • MySQL Connector/J 5.1.47及以上版本(适配MySQL 5.x)
  • MySQL Connector/J 8.0.19及以上版本(适配MySQL 8.x)

内容的提问来源于stack exchange,提问作者user2338456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:00:04