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

Debian 12 环境下启用TLS后,本地连接MariaDB 11.5.2 提示主机名验证失败

Debian 12 环境下启用TLS后,本地连接MariaDB 11.5.2 提示主机名验证失败

看起来你遇到的问题核心是TLS证书的主机名验证逻辑在起作用,咱们一步步把它捋清楚:

问题根源

你在客户端配置50-client.cnf里开启了ssl-verify-server-cert,这个选项会强制MariaDB客户端检查服务器证书中包含的主机名(或SAN主题备用名称字段),必须和你连接时使用的主机名完全匹配:

  • 当你用localhost或127.0.0.1连接时,客户端会拿这个地址和证书里的hostname.tld对比,显然不匹配,所以抛出「Hostname verification failed」错误;
  • 而指定host=hostname.tld连接时,主机名和证书信息完全一致,验证通过,所以能正常连接,且从你看到的TLS_AES_256_GCM_SHA384加密套件也能确认TLS确实在工作。

解决方案

根据你的使用需求,有两种可选方案:

方案1:保留本地无FQDN的连接(localhost/127.0.0.1)

如果你希望继续用localhost/127.0.0.1连接,同时保留远程连接的证书验证安全性,可以给本地连接单独配置跳过主机名验证:
修改/etc/mysql/mariadb.conf.d/50-client.cnf,添加一个针对本地连接的配置段:

[client-mariadb]
ssl
ssl-verify-server-cert

# 针对本地连接的特殊配置
[client-mariadb-local]
host=localhost
ssl
ssl-verify-server-cert=0

之后本地连接时,使用这个特殊配置组:

mariadb --defaults-group-suffix=-local -p -u root

这样本地连接会跳过主机名验证,但远程连接依然会强制验证证书主机名,兼顾安全性和便利性。

另一种更彻底的方法是给服务器证书添加本地地址的SAN字段:重新申请证书时,在CSR(证书签名请求)里加入DNS:localhost和IP:127.0.0.1作为主题备用名称,这样证书里同时包含你的FQDN和本地地址,无论用哪种方式连接都能通过验证。

方案2:统一使用FQDN连接

如果可以接受必须用FQDN连接数据库,你可以直接把客户端配置默认主机设为你的域名:
修改/etc/mysql/mariadb.conf.d/50-client.cnf:

[client-mariadb]
host=hostname.tld
ssl
ssl-verify-server-cert

之后直接执行mariadb -p -u root就会自动用FQDN连接,无需每次手动指定-h参数。

验证TLS连接状态

不管用哪种方案,连接成功后都可以执行以下命令确认TLS是否正常启用:

SHOW SESSION STATUS LIKE 'Ssl_cipher';

如果返回非空的加密套件值(比如你之前看到的TLS_AES_256_GCM_SHA384),就说明TLS连接正常工作。

备注:内容来源于stack exchange,提问作者Powerriegel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:57:57