MySQL服务端必须先启用require_secure_transport=ON,否则phpMyAdmin即使配置证书也无法连接;需在my.cnf[mysqld]段配置ssl_ca、ssl_cert、ssl_key及require_secure_transport=ON,重启后验证ON和Ssl_cipher非空,并在phpMyAdmin config.inc.php中显式指定客户端证书三件套及REQUIRE SUBJECT精确匹配证书DN。
MySQL服务端必须先启用require_secure_transport=ON
没这一步,phpmyadmin再怎么配证书也连不上——服务端根本不强制ssl,所有require x509或subject校验都形同虚设。光改ssl_ca、ssl_cert、ssl_key路径不等于生效。
必须在/etc/my.cnf的[mysqld]段里写死:
$cfg['Servers'][$i]['ssl'] = true; $cfg['Servers'][$i]['ssl_ca'] = '/etc/mysql/ca.pem'; $cfg['Servers'][$i]['ssl_cert'] = '/etc/mysql/client-cert.pem'; $cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/client-key.pem';
改完执行systemctl restart mysqld(不是reload),然后验证:
-
SHOW VARIABLES LIKE 'require_secure_transport';返回ON -
SHOW STATUS LIKE 'Ssl_cipher';当前连接返回非空值才算真加密
phpMyAdmin config.inc.php要显式填客户端三件套
phpMyAdmin默认不传任何证书,哪怕MySQL开了REQUIRE SUBJECT,它也会直接被拒,报错却是Access denied for user 'xxx'@'%' (using password: YES)——完全不提SSL,极具误导性。
必须在$cfg['Servers'][$i]配置块里手动指定全部三项:
-
ssl_ca指向CA根证书(和服务端用的同一份) -
ssl_cert和ssl_key必须配对,且私钥不能设密码(mysqlnd不支持交互解密) - 路径是PHP进程(如
www-data)能读的绝对路径,不是浏览器可访问路径 - 若用自签名CA,可临时加
$cfg['Servers'][$i]['ssl_verify'] = false;绕过CN/SAN校验,仅限内网测试
用户必须用CREATE USER REQUIRE SUBJECT精确绑定
REQUIRE SSL或REQUIRE X509只做单向验证,双向认证必须靠REQUIRE SUBJECT或REQUIRE ISSUER。
例如:
CREATE USER 'pma_user'@'%' IDENTIFIED BY 'p@ss' REQUIRE SUBJECT '/CN=phpmyadmin-client/O=myorg';
注意:
-
SUBJECT值必须和openssl x509 -in client-cert.pem -subject -noout输出**完全一致**:空格、斜杠顺序、大小写都不能差 -
GRANT ... REQUIRE SUBJECT无效,必须CREATE USER时声明 -
ALTER USER会覆盖而非追加条件,别反复执行 - 千万别给
root配这个,证书一出错就锁死
OpenSSL握手失败时别只看phpMyAdmin报错
看到Unknown SSL error或SSL connection error: protocol error,基本不是phpMyAdmin的问题,而是底层OpenSSL握手卡住。
排查重点:
- 用
openssl x509 -in /path/to/client-cert.pem -text -noout确认证书含X509v3 Extended Key Usage: TLS Web Client Authentication - 检查
client-key.pem权限是否为600,MySQL和PHP进程都得能读 - 服务端
ssl_ca路径必须包含签发客户端证书的那个CA(不是服务端自己的CA) - 如果服务端用了中间CA,客户端
ssl_ca必须拼入完整链(根+中间)
双向SSL最易被忽略的点:服务端require_secure_transport=ON和客户端ssl_ca/ssl_cert/ssl_key缺一不可,且用户创建语句里的REQUIRE SUBJECT必须和证书DN严丝合缝——差一个空格就拒绝连接。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











