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

为何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
    

排查方向

  1. 检查ssl_ca文件格式:
    确认cacert.pem是PEM格式,且两个根证书依次拼接(无多余空行或格式错误)。可执行cat /etc/mysql/cacert.pem查看,确保每个证书都以-----BEGIN CERTIFICATE-----开头,-----END CERTIFICATE-----结尾。

  2. 验证MariaDB是否加载了ssl_ca配置:
    登录MariaDB执行SHOW VARIABLES LIKE 'ssl_ca';,若返回空值,说明配置未被正确加载,需检查:

    • 配置是否在[mysqld]段下,而非其他段(如[mysql])
    • 配置文件是否被MariaDB读取(执行mysqld --help --verbose | grep -A 1 "Default options"确认加载的配置文件列表)
    • 配置文件是否有语法错误(执行mysqld --validate-config检查)
  3. 检查客户端CA证书配置:
    部分客户端(如DBeaver、phpMyAdmin)需指定信任的CA证书才能验证服务器证书:

    • DBeaver:在连接设置的SSL标签中,启用SSL并在“SSL CA证书”字段指定cacert.pem的路径
    • phpMyAdmin:在config.inc.php中添加$cfg['Ssl']['ca'] = '/path/to/cacert.pem';,确保web服务器有权限读取该文件
  4. 验证系统信任链:
    若客户端依赖系统信任池,可将cacert.pem中的根证书导入系统信任库:

    sudo cp /etc/mysql/cacert.pem /usr/local/share/ca-certificates/mariadb-ca.crt
    sudo update-ca-certificates
    

    之后重启客户端服务(如apache2)再测试连接。

  5. 检查MariaDB日志:
    查看MariaDB错误日志(默认路径/var/log/mysql/error.log),搜索SSL相关条目,确认是否有加载证书时的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:05:24