MySQL 5.7.17+ 默认不强制SSL,但服务端启用require_secure_transport=ON时会拒绝非SSL连接;XAMPP新版可能默认开启该选项,需在my.ini中设为OFF,或配置phpMyAdmin禁用SSL及适配认证插件。

MySQL 5.7+ 默认强制 SSL 连接?
从 MySQL 5.7.17 开始,mysql_native_password 插件用户在未显式禁用 SSL 的情况下,客户端连接时若服务端未配置有效 SSL 证书,会报错:SSL connection error: protocol version mismatch 或直接拒绝连接。XAMPP 自带的 MySQL(通常为 5.7.x 或 8.0.x)默认启用 require_secure_transport=OFF,但部分新版 XAMPP 安装包或手动升级后可能被设为 ON,导致本地 phpMyAdmin、PHP 脚本甚至命令行 mysql -u root 都连不上。
修改 my.ini 禁用 require_secure_transport
这是最直接有效的解法,适用于开发环境且不强制走加密通道的场景:
- 关闭 XAMPP 控制面板中的 MySQL 服务
- 打开
X:\xampp\mysql\bin\my.ini(Windows)或/opt/lampp/etc/my.cnf(Linux/macOS) - 在
[mysqld]段落末尾添加一行:require_secure_transport=OFF - 保存文件,重启 MySQL 服务
注意:不要改 ssl-mode=DISABLED —— 这是客户端参数,写在服务端配置里无效;也不要删掉整个 [mysqld] 块,否则 MySQL 启动失败。
phpMyAdmin 连接失败时检查 config.inc.php
即使 MySQL 允许非 SSL 连接,phpMyAdmin 也可能因硬编码配置而报错:The server requested authentication method unknown to the client [caching_sha2_password] 或 SSL 相关拒绝。
- 编辑
X:\xampp\phpMyAdmin\config.inc.php - 找到
$cfg['Servers'][$i]['auth_type']所在区块,在其下方添加:
$cfg['Servers'][$i]['ssl'] = false; $cfg['Servers'][$i]['connect_type'] = 'tcp';
如果使用的是 MySQL 8.0+ 默认认证插件,还需确保该服务器项包含:$cfg['Servers'][$i]['auth_plugin'] = 'mysql_native_password';(否则登录页可能空白或 500)
不想关 SSL,只想让本地连接绕过验证?
开发中常需保留 SSL 配置但允许 localhost 明文连接 —— 这不能靠改全局参数实现,得靠用户级权限控制:
- 用管理员身份启动命令行,进入
X:\xampp\mysql\bin - 执行:
mysql -u root -p,输入密码后执行:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY ''; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;
这样,当 PHP 或命令行明确用 127.0.0.1(而非 localhost)连接时,就走这个无 SSL 要求的账户。注意:localhost 在 MySQL 中触发 socket 连接,行为与 TCP 不同,无法通过此方式绕过 SSL 限制。
真正麻烦的点在于:XAMPP 的 MySQL 启动脚本不校验证书有效性,但客户端(尤其是 PHP 8.1+ 和新版 MySQL Connector)会严格校验 SSL 协议版本和密钥交换方式。哪怕你只改了 require_secure_transport,若客户端仍传 ?ssl-mode=REQUIRED,照样失败 —— 得从应用层代码或配置里一并清理掉这个参数。


















