phpMyAdmin配置SSL CA后无法连接IPv6环境下的MariaDB服务器问题咨询
问题根因
该问题核心为SSL证书匹配规则导致:你之前签发的MariaDB服务端SSL证书的**使用者备用名称(SAN, Subject Alternative Name)**字段仅包含旧的IPv4地址,未加入新的IPv6地址。当phpMyAdmin通过IPv6连接时,开启ssl_ca验证会校验服务端证书与访问地址的匹配性,匹配失败就会抛出连接错误,注释ssl_ca相当于关闭了服务端证书合法性校验,所以能连接但会出现未使用CA认证的警告。
修复步骤
- 第一步:先验证证书匹配问题
在phpMyAdmin所在服务器执行以下命令,确认是否为证书校验失败:
openssl s_client -connect [你的MariaDB IPv6地址]:3306 -starttls mysql -CAfile /path/to/你的ca-cert.pem
如果返回结果包含Verify return code: 20 (unable to get local issuer certificate)或hostname mismatch,即可确认是证书匹配问题。
- 第二步:重新生成带IPv6地址的MariaDB服务端证书
创建证书配置文件san.cnf,示例内容如下,按需修改对应字段:
[req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [dn] C = CN ST = 省份 L = 城市 O = 组织名 CN = MariaDB服务标识 [req_ext] subjectAltName = @alt_names [alt_names] IP.1 = 原有IPv4地址(可选,保留兼容IPv4访问) IP.2 = 新的IPv6地址
使用该配置文件生成服务端证书请求,再用原有CA根证书签发新的服务端证书。
第三步:替换证书并重启服务
将新生成的服务端证书、密钥替换到MariaDB服务器的对应存储路径,重启MariaDB服务使配置生效。第四步:恢复phpMyAdmin配置
取消config.inc.php中ssl_ca配置行的注释,如需可以额外添加两行校验配置增强安全性:
$cfg['Servers'][$i]['ssl'] = true; $cfg['Servers'][$i]['ssl_ca'] = '/..../ca-cert.pem'; $cfg['Servers'][$i]['ssl_verify'] = true; $cfg['Servers'][$i]['ssl_allow_invalid_cert'] = false;
兼容方案(如证书生成后仍不生效)
你环境中使用的mysqlnd 5.0.12-dev版本存在IPv6地址证书匹配的已知bug,如上述步骤未解决问题,可通过域名映射绕开IP匹配限制:
- 在phpMyAdmin所在服务器的
/etc/hosts中添加记录,将自定义域名指向MariaDB的IPv6地址 - 重新生成服务端证书,在SAN字段中添加该自定义域名
- 修改phpMyAdmin的host配置为该自定义域名即可正常走CA校验。
内容的提问来源于stack exchange,提问作者Alexander Konov
相关产品推荐
相关产品推荐

