一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何解决MySQL SSL证书配置失败?

时间:2026-08-25 09:55:49 编辑:袖梨 来源:一聚教程网

MySQL SSL证书配置失败主因是证书未被加载:have_ssl=DISABLED、Ssl_cipher为空,根源在于ssl_ca路径非绝对、权限非600、属主非mysql用户,或证书缺失subjectAltName字段;需用sudo -u mysql cat验证可读性,并用openssl确认SAN存在,云数据库须查控制台ValidTill。

MySQL SSL证书配置失败,90%不是配错了参数,而是证书本身不被MySQL 8.0+加载——have_ssl显示DISABLEDSHOW STATUS LIKE 'Ssl_cipher'返回空,说明MySQL根本没用上证书,连校验环节都没走到。

为什么ssl_ca路径正确却加载失败?

MySQL启动时对ssl_ca文件的读取极为苛刻,静默失败是常态:

  1. ssl-ca必须写在[mysqld]段,写在[client][mysql]里完全无效
  2. 路径必须是绝对路径,./ca.pem~/ssl/ca.pem会被忽略
  3. 文件属主必须是mysql用户(Linux),权限必须为600644755都会导致加载失败
  4. 重启前务必手动验证:执行sudo -u mysql cat /etc/mysql/ssl/ca.pem,若报“Permission denied”或“No such file”,就别指望MySQL能读到

自签名证书为什么MySQL 8.0+拒绝加载?

MySQL 8.0.28+强制要求证书含subjectAltName(SAN),缺它就跳过加载,且不报错:

  1. 仅靠CN=db.example.com不够,必须显式声明subjectAltName = DNS:db.example.com,IP:10.0.1.5,IP:127.0.0.1
  2. OpenSSL 3.0+可用-addext "subjectAltName=...",但老版本必须用配置文件,否则生成的证书无SAN
  3. 生成后用openssl x509 -in server-cert.pem -text -noout | grep -A1 "Subject Alternative Name"确认字段存在
  4. 若输出为空,证书就被MySQL无视,have_ssl永远是DISABLED

客户端连不上,真是证书问题吗?

先排除服务端证书过期,再动客户端配置:

  1. 查服务端CA有效期:openssl x509 -in /var/lib/mysql/ca.pem -text -noout | grep -E "(Not Before|Not After)"Not After早于当前时间即失效
  2. 云数据库(RDS/AWS/腾讯云)无法读文件,直接去控制台查ValidTill字段
  3. 命令行连接必须同时指定--ssl-mode=VERIFY_IDENTITY--ssl-ca=/path/to/ca.pem,只写--ssl-mode=REQUIRED等于没校验
  4. DBeaver需填sslTrustCertificate(绝对路径),JDBC需传trustCertificateKeyStoreUrl,PDO需DSN里带ssl_mode=VERIFY_IDENTITY并设PDO::MYSQL_ATTR_SSL_CA

最容易被忽略的是:证书换了,但MySQL进程没重载TLS上下文。老版本只能service mysql restart,新版本(5.7.36+/8.0.16+)应优先用ALTER INSTANCE RELOAD TLS;——否则你改了证书、改了配置、清了缓存,还是连不上。

热门栏目