为何MariaDB服务器的Ssl_ca/CA证书似乎未正确配置?
单向TLS配置下MariaDB CA证书未被识别问题排查
我使用的MariaDB版本是10.6.12-MariaDB-0ubuntu0.22.04.1(运行在Ubuntu 22.04),目标是实现单向TLS:服务器用可信机构颁发的证书标识自身,客户端仅通过用户名密码认证,无需证书,同时确保服务器CA证书能被正常验证。
目前连接能正常建立且已加密,但存在CA证书未被识别的问题:
- 使用DBeaver连接时,执行
SHOW STATUS LIKE 'Ssl_ca';返回空值 - phpMyAdmin提示“SSL is used without certificate authority”
已完成的配置与检查
- 在
/etc/mysql/mariadb.conf.d/50-server.cnf中配置SSL参数:[mysqld] ssl_ca = /etc/mysql/cacert.pem ##包含从证书提供商获取的两个根证书 ssl_cert = /etc/mysql/server-cert.pem ##可信机构颁发的服务器证书 ssl_key = /etc/mysql/server-key.pem ##服务器证书对应的私钥 require-secure-transport = on - 证书文件权限与所有者配置正确
- 文件路径确认无误
- MariaDB可正常启动、重启
- 执行
openssl verify -CAfile /etc/mysql/cacert.pem /etc/mysql/server-cert.pem返回OK - 服务器证书为X509格式
- 远程连接用户已启用
REQUIRE SSL - 远程连接配置:启用SSL、强制SSL、验证服务器证书,未设置客户端证书
- 远程连接可正常建立
- 执行
SHOW STATUS LIKE 'Ssl_cipher';返回TLS_AES_256_GCM_SHA384 - 通过客户端执行
openssl s_client -connect my.server.randomtld:3306 -starttls mysql,显示证书链正确 - 防火墙配置无误:
iptables -D INPUT -p tcp --dport 3306 -j DROP sudo iptables -A INPUT -p tcp --dport 3306 -s 111.111.111.111 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 3306 -s 222.222.222.222 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
排查方向
检查
ssl_ca文件格式:
确认cacert.pem是PEM格式,且两个根证书依次拼接(无多余空行或格式错误)。可执行cat /etc/mysql/cacert.pem查看,确保每个证书都以-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾。验证MariaDB是否加载了
ssl_ca配置:
登录MariaDB执行SHOW VARIABLES LIKE 'ssl_ca';,若返回空值,说明配置未被正确加载,需检查:- 配置是否在
[mysqld]段下,而非其他段(如[mysql]) - 配置文件是否被MariaDB读取(执行
mysqld --help --verbose | grep -A 1 "Default options"确认加载的配置文件列表) - 配置文件是否有语法错误(执行
mysqld --validate-config检查)
- 配置是否在
检查客户端CA证书配置:
部分客户端(如DBeaver、phpMyAdmin)需指定信任的CA证书才能验证服务器证书:- DBeaver:在连接设置的SSL标签中,启用SSL并在“SSL CA证书”字段指定
cacert.pem的路径 - phpMyAdmin:在
config.inc.php中添加$cfg['Ssl']['ca'] = '/path/to/cacert.pem';,确保web服务器有权限读取该文件
- DBeaver:在连接设置的SSL标签中,启用SSL并在“SSL CA证书”字段指定
验证系统信任链:
若客户端依赖系统信任池,可将cacert.pem中的根证书导入系统信任库:sudo cp /etc/mysql/cacert.pem /usr/local/share/ca-certificates/mariadb-ca.crt sudo update-ca-certificates之后重启客户端服务(如apache2)再测试连接。
检查MariaDB日志:
查看MariaDB错误日志(默认路径/var/log/mysql/error.log),搜索SSL相关条目,确认是否有加载证书时的错误提示。
内容的提问来源于stack exchange,提问作者Lucas Johnston
相关产品推荐
相关产品推荐

