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

使用--ssl-verify-server-cert连接本地MySQL报SSL证书验证失败求助

问题背景

环境:db-host运行MariaDB 5.5(数月内无法升级),web-host运行Tomcat。此前已配置CA证书包实现TLS加密连接,近期连接被拒绝。

本地测试情况

登录db-host执行连接命令:

db-host> mysql -h localhost -u dbuser -p --ssl-ca=/etc/pki/bundle-of-certs.crt --ssl-verify-server-cert
Enter password: (输入正确密码)
ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure
  • 不加--ssl-verify-server-cert参数能成功连接,但ssl_cipher为空
  • 已确认ssl_ca、ssl_cert、ssl_key配置正确,指向对应文件
  • /etc/pki/bundle-of-certs.crt包含多个CA证书(含过期和有效证书),文件数月未修改
  • 用openssl验证服务器证书有效:
db-host> openssl verify -CAfile /etc/pki/bundle-of-certs.crt /etc/pki/db-host.crt
/etc/pki/db-server.crt: OK
  • 已确认db-host.crt的CN和SAN符合预期

附注:Web应用连接时报错SSHHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate),怀疑是证书验证失败导致,优先解决证书问题。

更新内容

更新1(回复Georg Richter)

执行mysql -h db-host -u user --ssl-verify-server-cert ....仍报SSL certificate validation failure。执行show variables like '%ssl%';结果:

| Variable_name | Value
+---------------+--------------
| have_openssl  | YES
| have_ssl      | YES
| ssl_ca        | /etc/pki/bundle-of-certs.crt
| ssl_capath    | (空)
| ssl_cert      | /etc/pki/db-host.crt
| ssl_cipher    | (空)
| ssl_key       | /etc/pki/db-host.key

更新2

执行以下命令出现结果不一致:

db-host> mysql -u user -h db-host -p --ssl
Enter password:
MariaDB [(none)]: \s
SSL:    Cipher in use is DHE-RSA-AES256-GCM-SHA384

MariaDB> show variables like 'ssl_cipher'
| ssl_cipher    | (空)

即使命令行指定--ssl-ca --ssl-cert --ssl-key正确值,\s显示已使用RSA密码套件,但show variables仍为空。

更新2.1:确认服务器证书的X509 Subject Alternative Name包含DNS: db-host.foo.bar.baz, DNS:db-host, DNS:localhost,主机名/短名/localhost连接在证书层面等效。

更新3

查询状态变量发现:

> show status like 'ssl_version';
| Ssl_version     | TLSv1.2
> show status like 'ssl_cipher';
| Ssl_cipher      | DHE-RSA-AES256-GCM-SHA384
> show variables like 'ssl_cipher';
| Ssl_cipher      | (空)

怀疑此前方向错误,需重新排查。

排查与修复建议
  • 清理CA证书包中的过期证书
    MariaDB 5.5的SSL验证逻辑可能因证书包中存在过期证书触发失败,即使目标证书由有效CA签发。移除bundle-of-certs.crt中的过期证书,仅保留有效CA证书后重新测试连接。

  • 检查TLS协议与密码套件兼容性
    Web应用的No appropriate protocol错误,大概率是Tomcat与MariaDB 5.5的TLS支持不匹配:

    1. 执行openssl version查看db-host的OpenSSL版本,若低于1.0.1则不支持TLSv1.2
    2. 检查Tomcat的JVM参数(如-Djdk.tls.disabledAlgorithms)或连接器配置,是否禁用了MariaDB支持的协议/密码套件
  • 澄清ssl_cipher变量与状态的差异
    show variables like 'ssl_cipher'显示的是服务器强制密码套件列表(为空表示允许所有支持的套件),show status like 'ssl_cipher'和\s显示的是当前连接实际使用的套件,二者差异是正常现象,无需纠结。

  • 检查主机名解析与证书验证细节
    尝试用127.0.0.1连接测试,部分旧版本SSL库对localhost和127.0.0.1的验证逻辑不同,若IP连接失败,需在证书中添加IP类型的SAN。

  • 验证证书文件权限
    确认/etc/pki/bundle-of-certs.crt、db-host.crt、db-host.key的权限允许MariaDB进程读取(如属主为mysql用户,权限设为600/644),权限不足会导致证书读取失败,间接引发验证错误。

  • 抓包分析SSL握手过程
    在db-host执行tcpdump -i any port 3306 -w mysql-ssl.pcap抓包,用Wireshark分析SSL/TLS流的详细阶段,定位握手失败的具体原因。


内容的提问来源于stack exchange,提问作者Codes with Hammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:06:32