phpmyadmin 不支持 pdo 的 ssl 配置,必须在 config.inc.php 中单独配置 $cfg['servers'][$i]['ssl'] = true 及 ssl_ca、ssl_cert、ssl_key 等字段,且证书路径需绝对、权限正确、属主为 web 进程用户。

phpMyAdmin 不支持 PDO 的 SSL 配置项
phpMyAdmin 底层用的是 mysqli 扩展,不是 PDO。你在 config/database.php 里给 PDO 配的 PDO::MYSQL_ATTR_SSL_CA、PDO::MYSQL_ATTR_SSL_MODE 等选项,对 phpMyAdmin 完全无效——它压根不读 Laravel 的数据库配置,也不走同一套连接逻辑。
phpMyAdmin 的 SSL 配置必须单独改 config.inc.php
它只认自己配置文件里的 $cfg['Servers'][$i]['ssl'] 和相关字段,且默认是关闭的。常见错误包括:
-
$cfg['Servers'][$i]['ssl'] = false;—— 必须设为true - 漏掉 CA 路径:
$cfg['Servers'][$i]['ssl_ca'] = '/etc/ssl/certs/ca-certificates.crt';(云数据库必须用控制台下载的 bundle,比如/var/www/html/certs/RDS-Global-Bundle.pem) - 路径写相对路径或
~:phpMyAdmin 不做 shell 展开,~/certs/ca.pem会静默失败 - 没配
$cfg['Servers'][$i]['ssl_verify'] = true;:不校验证书时可能连上,但VERIFY_IDENTITY模式下必填,否则握手直接中断
MySQL 服务端 require_secure_transport=on 时,phpMyAdmin 用户必须显式 REQUIRE SSL
即使你把 phpMyAdmin 配对了 SSL,如果对应数据库用户(比如 pma 或 root)没授权强制 SSL,MySQL 仍会拒绝握手。验证方式:
SELECT user, host, ssl_type FROM mysql.user WHERE user = 'pma';
若 ssl_type 是空或 ANY,需执行:
ALTER USER 'pma'@'localhost' REQUIRE SSL;
然后 FLUSH PRIVILEGES;。注意:改完后普通非 SSL 连接(如本地命令行)也会被拒,得同步调整其他客户端。
证书权限和路径在 Web 环境下特别容易踩坑
phpMyAdmin 是由 Web 服务器(如 Apache 或 Nginx)以 www-data 或 apache 用户身份运行的,它读不了你 root 或开发用户家目录下的证书文件。
- 证书文件权限至少是
644,属主得包含 Web 进程用户 - 别放在
/home/xxx/certs/这类路径——Web 进程通常无权访问他人 home 目录 - Docker 环境下,确保证书已挂载进容器,且路径与
config.inc.php中写的完全一致 - 用
openssl x509 -in /path/to/ca.pem -text -noout手动验证 Web 进程能否读取并解析该文件
真正容易被忽略的是:phpMyAdmin 的 SSL 握手失败往往不报具体错误,只显示“无法连接”或空白页,得看 PHP 错误日志或 MySQL 错误日志才能定位到 SSL connection error: unknown error number 这类底层提示。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











