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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:24:16