MySQL 8.0双向SSL认证必须同时满足require_secure_transport=ON、CREATE USER时用REQUIRE SUBJECT精确绑定客户端证书DN、客户端显式传--ssl-mode=REQUIRED及--ssl-ca/--ssl-cert/--ssl-key;缺一即静默报Access denied。

MySQL 8.0 的双向SSL认证不是“配完证书就自动生效”,必须同时满足服务端强制、用户级证书绑定、客户端显式传参三者,缺一不可;否则连接会静默失败,报 Access denied for user,而非明确的 SSL 错误。
require_secure_transport = ON 是硬性守门员
它必须写在 [mysqld] 段,重启后执行 SHOW VARIABLES LIKE 'require_secure_transport'; 确认返回 ON。设为 OFF 或注释掉,就退化为普通连接——此时所有 SSL 配置都无效。
ssl_mode = REQUIRED 是客户端行为,服务端完全不读这个值,别把它和 require_secure_transport 混淆。
- 证书路径必须是绝对路径:
ssl_ca = /var/lib/mysql/ca.pem,不能用~/或相对路径 - MySQL 启动时不会因证书路径错而报错,但
Ssl_cipher始终为空,日志里只有静默失败 - 若用
mysql_ssl_rsa_setup生成证书,记得加--uid=mysql,避免权限问题
CREATE USER 必须用 REQUIRE SUBJECT,不能靠 GRANT 补救
只写 REQUIRE SSL 或 REQUIRE X509 只能做基础校验;生产环境必须用 REQUIRE SUBJECT 绑定客户端证书的 DN 字段,否则无法实现身份精确控制。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
SUBJECT 值必须与 openssl x509 -in client-cert.pem -subject -noout 输出**逐字一致**:空格、斜杠顺序、大小写都不能差。
- 正确语法:
CREATE USER 'u'@'%' REQUIRE SUBJECT '/CN=client1/O=myorg'; -
GRANT ... REQUIRE X509无效;ALTER USER 'u'@'%' REQUIRE SUBJECT ''会清空之前所有 REQUIRE 条件,不是追加 - 切勿给
root用户配REQUIRE SUBJECT,一旦证书路径错或失效,可能彻底锁死管理入口
mysql 命令行客户端必须显式传三个 PEM 文件
它不读 my.cnf 的 [client] 段,漏掉任一参数,错误表现通常是 Access denied for user,而不是明确的 SSL 错误。
- 最小必要组合:
mysql --ssl-mode=REQUIRED --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u u -p -
--ssl-cert和--ssl-key必须成对出现;私钥不能加密(生成时用了-nodes),否则客户端无法加载 -
ca.pem在客户端和服务端必须是同一份;若服务端用了中间 CA,客户端也得把根 CA + 中间 CA 拼进一个ca.pem里 - Linux 上证书文件权限必须是
600,否则mysql命令拒绝读取
ThinkPHP 等应用客户端要用 PDO 标准属性名
ThinkPHP 不识别 sslca、sslcert 这类简写,必须用标准 PDO 属性名,且路径要用绝对路径。
- 正确写法(PDO DSN 中):
sslca=/absolute/path/to/ca.pem&sslcert=/absolute/path/to/client-cert.pem&sslkey=/absolute/path/to/client-key.pem - 路径不能用
./或../,也不能依赖__DIR__动态拼接,必须是启动时可解析的绝对路径 - 若用 Laravel 或其他框架,同样需确认其数据库驱动是否透传这些参数;有些封装层会过滤掉非标准键名
最容易被忽略的是:服务端证书的 subjectAltName(尤其是 IP 地址)必须匹配客户端连接所用地址,否则握手会在验证阶段失败,且错误常被掩盖为认证失败——查 openssl s_client -connect 127.0.0.1:3306 -CAfile ca.pem -cert client-cert.pem -key client-key.pem 能提前暴露这类问题。

















