使用Certbot生成的证书配置MariaDB SSL失败求助
MariaDB SSL证书配置无效问题
我尝试使用Certbot为MariaDB服务端和客户端生成证书,但配置后无法生效。执行的证书生成命令为:
sudo certbot certonly -d mariadbserver -d mariadbuser
生成后得到mariadbserver和mariadbuser各自的cert.pem、chain.pem、fullchain.pem、privkey.pem共8个文件,将它们复制到/etc/my.cnf.d/certificates目录并重命名为:
client-cert.pem client-chain.pem client-fullchain.pem client-privkey.pem server-cert.pem server-chain.pem server-fullchain.pem server-privkey.pem
执行命令修改权限:
sudo chown -R mysql. /etc/my.cnf.d/certificates
在/etc/my.cnf中添加配置片段:
[mariadb] ssl-ca= /etc/my.cnf.d/certificates/server-chain.pem ssl-cert= /etc/my.cnf.d/certificates/server-cert.pem ssl-key= /etc/my.cnf.d/certificates/server-privkey.pem [client-mariadb] ssl-ca= /etc/my.cnf.d/certificates/client-chain.pem ssl-cert= /etc/my.cnf.d/certificates/client-cert.pem ssl-key= /etc/my.cnf.d/certificates/client-privkey.pem
执行sudo service mariadb restart重启服务后,登录MariaDB发现Cipher显示未使用,请问操作中是否有误,该如何解决?
问题分析与解决步骤
1. 核心错误点
你的操作存在3个关键问题:
- Certbot执行多域名命令时,只会生成一套包含所有域名SAN的证书,而非两套独立证书,拆分重命名的方式完全错误。
- 服务端与客户端的
ssl-ca配置搞反了:服务端的ssl-ca用于验证客户端证书,应指向客户端证书的CA链;客户端的ssl-ca用于验证服务端证书,应指向服务端的CA链。 - 客户端配置段
[client-mariadb]不被标准MariaDB客户端识别,需用[client]段。
2. 修正操作步骤
步骤1:重新整理证书文件
Certbot生成的证书存放在/etc/letsencrypt/live/mariadbserver/目录下,仅需复制这套文件到目标目录:
sudo cp /etc/letsencrypt/live/mariadbserver/{cert,privkey,fullchain}.pem /etc/my.cnf.d/certificates/ sudo mv /etc/my.cnf.d/certificates/cert.pem server-cert.pem sudo mv /etc/my.cnf.d/certificates/privkey.pem server-privkey.pem sudo mv /etc/my.cnf.d/certificates/fullchain.pem server-fullchain.pem
注:如果需要双向SSL(客户端提供证书),Certbot不适合生成客户端证书,需用OpenSSL单独创建(见步骤3)。
步骤2:修正MariaDB配置文件
编辑/etc/my.cnf,替换为以下配置:
[mariadb] # 强制启用SSL ssl=ON require_secure_transport=ON # 服务端证书配置 ssl-cert=/etc/my.cnf.d/certificates/server-cert.pem ssl-key=/etc/my.cnf.d/certificates/server-privkey.pem # 若启用双向验证,添加此行(指向客户端证书的CA文件) # ssl-ca=/etc/my.cnf.d/certificates/client-ca.pem [client] # 客户端SSL配置 ssl=ON ssl-mode=REQUIRED # 验证服务端证书的CA链 ssl-ca=/etc/my.cnf.d/certificates/server-fullchain.pem # 若启用双向验证,添加客户端证书配置 # ssl-cert=/etc/my.cnf.d/certificates/client-cert.pem # ssl-key=/etc/my.cnf.d/certificates/client-privkey.pem
步骤3:生成客户端证书(双向验证场景)
如果需要客户端提供证书才能连接,用OpenSSL创建自签CA和客户端证书:
# 创建自签CA openssl req -new -x509 -days 3650 -keyout ca-key.pem -out ca-cert.pem -nodes # 生成客户端密钥和证书请求 openssl req -new -keyout client-key.pem -out client-req.pem -nodes # 用CA签署客户端证书 openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem # 将CA证书复制到服务端,客户端证书复制到客户端机器 sudo cp ca-cert.pem /etc/my.cnf.d/certificates/client-ca.pem
步骤4:修复权限并重启服务
sudo chown -R mysql:mysql /etc/my.cnf.d/certificates sudo chmod 700 /etc/my.cnf.d/certificates sudo chmod 600 /etc/my.cnf.d/certificates/*.pem sudo systemctl restart mariadb
步骤5:验证SSL状态
登录MariaDB后执行以下命令:
-- 查看SSL配置 SHOW VARIABLES LIKE '%ssl%'; -- 查看当前连接的Cipher SHOW STATUS LIKE '%Ssl_cipher%';
若Ssl_cipher返回非空值,说明SSL已生效。
3. 额外排查点
- 查看MariaDB错误日志(
/var/log/mariadb/mariadb.log),确认是否有证书加载失败的报错 - 客户端连接时显式指定SSL参数:
mysql --ssl-mode=REQUIRED -u your_user -p - 确保客户端连接使用的主机名与证书中的SAN字段匹配,避免用IP连接
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

