You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker WordPress:php8.3-apache配置MySQL加密连接遇权限拒绝问题排查

WordPress Docker镜像MySQL SSL连接问题排查

可能的错误原因

  • 数据库用户权限限制:1045错误核心是身份认证失败,即便证书配置正确,如果root@x.190用户没有被允许通过SSL连接(或无该IP的访问权限),数据库会直接拒绝请求。比如MySQL服务器开启了require_secure_transport=ON,但该用户未配置SSL访问权限;或者用户仅允许非SSL连接,而服务器强制要求SSL。
  • 证书文件权限/路径问题:虽已将证书放到指定目录,但Apache/PHP的运行用户(通常为www-data)可能没有证书读取权限。若证书权限为root:root且仅所有者可读(600),www-data无法加载证书,导致连接失败。
  • WordPress参数未生效:部分WordPress版本或自定义配置中,DB_SSL、MYSQL_CLIENT_FLAGS等参数可能未被正确识别,导致SSL配置未触发,连接仍以非SSL方式发起,不符合服务器要求。

如何验证证书是否被使用

1. 查看MySQL服务器日志

登录MySQL服务器,检查错误日志(默认路径如/var/log/mysql/error.log),搜索对应客户端IP的连接记录:

  • 若日志出现SSL connection established及证书相关信息,说明证书已被使用;
  • 若显示connection without SSL,则证书未生效。

2. 容器内直接测试SSL连接

进入WordPress容器:

docker exec -it <容器ID/名称> bash

使用mysql客户端手动发起SSL连接:

mysql -h <数据库地址> -u root -p \
  --ssl-mode=REQUIRED \
  --ssl-key=/usr/src/wordpress/sql/client-key.pem \
  --ssl-cert=/usr/src/wordpress/sql/client-cert.pem \
  --ssl-ca=/usr/src/wordpress/sql/server-ca.pem
  • 成功连接:证书本身有效且可被读取,问题出在WordPress配置或用户权限;
  • 报access denied:用户权限问题;
  • 报unable to load certificate:证书权限/路径错误。

3. 添加临时调试代码

在wp-config.php末尾加入以下代码,访问站点首页查看连接状态:

$link = mysqli_init();
mysqli_ssl_set($link, MYSQL_SSL_KEY, MYSQL_SSL_CERT, MYSQL_SSL_CA, NULL, NULL);
$connected = mysqli_real_connect($link, DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, NULL, NULL, MYSQL_CLIENT_FLAGS);
if ($connected) {
    echo "SSL Cipher in use: " . mysqli_get_ssl_cipher($link);
    mysqli_close($link);
} else {
    echo "Connection Error: " . mysqli_connect_error();
}
  • 显示SSL Cipher信息:证书已正常使用;
  • 显示连接错误:证书配置未生效。

证书未使用的排查步骤

1. 修正证书权限

在容器内执行命令,确保www-data可读证书:

# 修改证书所有者为www-data
chown www-data:www-data /usr/src/wordpress/sql/*.pem
# 设置可读权限
chmod 644 /usr/src/wordpress/sql/*.pem

2. 检查MySQL用户SSL权限

登录MySQL服务器,执行SQL查看用户配置:

SELECT user, host, ssl_type FROM mysql.user WHERE user='root';
  • 若ssl_type为空,说明用户未配置SSL访问权限,执行以下命令更新:
ALTER USER 'root'@'x.190' REQUIRE SSL;
FLUSH PRIVILEGES;
  • 若服务器强制要求SSL(require_secure_transport=ON),需确保用户已配置SSL权限;若仅测试,可临时关闭该参数排查。

3. 确认WordPress参数有效性

检查wp-includes/class-wpdb.php中mysqli_real_connect的调用逻辑,确认是否正确读取了MYSQL_CLIENT_FLAGS和SSL参数。同时临时切换到默认主题、禁用所有插件,排除第三方代码覆盖配置的可能。

4. 验证PHP mysqli SSL支持

在容器内执行命令,查看mysqli扩展的SSL支持状态:

php -i | grep -i ssl

确保mysqli.ssl_capable显示为On,若为Off,说明PHP扩展未编译SSL支持,需更换包含SSL的镜像或重新编译扩展。

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:33:18