必须手动配置MySQL SSL证书路径并启用强制加密:在宝塔MySQL配置中严格添加ssl-ca、ssl-cert、ssl-key三行(路径须完全一致),且必须设置require_secure_transport=ON并重启服务;证书需无密码、含subjectAltName、同CA签发,权限设为600;验证需用SSL参数登录并检查Ssl_cipher非空。

必须手动配置,宝塔不自动签发也不校验证书路径——配错一行就导致 MySQL 启动失败。
MySQL SSL 配置文件必须加这三行参数
在宝塔面板「软件商店 → MySQL → 设置 → 配置修改」中,找到 [mysqld] 区块末尾,严格添加以下三行(路径必须和你生成证书的实际位置完全一致):
ssl-ca=/www/server/panel/vhost/cert/mysql_ssl/ca.pemssl-cert=/www/server/panel/vhost/cert/mysql_ssl/server-cert.pemssl-key=/www/server/panel/vhost/cert/mysql_ssl/server-key.pem
漏掉任意一行,SHOW VARIABLES LIKE '%ssl%' 会显示 OFF;路径写错或权限不对(比如私钥不是 600),MySQL 服务根本启动不了,日志里报 SSL error: Unable to get certificate 或类似错误。
require_secure_transport = ON 是强制加密的关键开关
仅配置证书路径,MySQL 默认仍允许非 SSL 连接。要真正堵死明文通道,必须加这一行:
require_secure_transport = ON
加完后重启 MySQL(不是 reload),所有新连接都会被拒绝,除非客户端明确提供 --ssl-ca、--ssl-cert、--ssl-key。注意:该配置不支持热加载,改完必须完整重启服务。
证书生成时最容易踩的三个坑
用 OpenSSL 手动生成证书时,这三个点不处理,客户端连上会立刻报错:
- 私钥不能带密码:
openssl rsa -in server-key.pem -out server-key.pem必须执行一次,否则 MySQL 启动失败 - 证书必须含
subjectAltName(如IP:127.0.0.1,DNS:localhost),否则远程连接时客户端提示X509_V_ERR_IP_ADDRESS_MISMATCH - CA 和 server 证书必须用同一套 CA 签发,不能混用不同来源的
ca.pem
路径权限也要盯紧:MySQL 进程用户(通常是 mysql)必须对三个证书文件有读权限,server-key.pem 建议 chown mysql:mysql + chmod 600,放 /root/ 下基本必挂。
验证 SSL 是否真生效不能只看 status
SHOW VARIABLES LIKE '%ssl%' 只说明服务端配了,不代表连接加密了。真正验证要分两步:
- 用带 SSL 参数的命令登录:
mysql -u用户名 -p --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -h 服务器IP - 登录后立即执行:
SELECT @@have_ssl, Ssl_cipher FROM performance_schema.status_by_thread WHERE thread_id = CONNECTION_ID();——Ssl_cipher非空才表示当前连接已走加密通道
别跳过第二步。很多用户配完以为 OK,结果应用直连还是走明文,因为没强制 require_secure_transport,也没在应用连接串里加 ?ssl-mode=REQUIRED 这类参数。


















