navicat 不支持 tls 双向认证,因其无法上传客户端证书;双向认证需 mariadb 侧配置 require_secure_transport=on 并为用户设置 require x509 权限,配合正确 ssl 参数与 ca 验证方可生效。

Navicat 连接 MariaDB 10.6 时 TLS 双向认证不生效?先确认它真被启用了
Navicat 本身不主动发起 TLS 双向认证(即客户端证书验证),它只支持单向 TLS(服务端证书校验)或“强制 SSL”模式下的基础加密通道。所谓“双向”,实际依赖 MariaDB 服务端配置 require_secure_transport=ON + REQUIRE X509 权限,而 Navicat 并不提供上传客户端证书(client-cert.pem / client-key.pem)的界面字段。常见错误现象是:填了 CA 文件、勾了“使用 SSL”和“验证 CA”,连接成功但 SELECT @@have_ssl, Ssl_cipher FROM information_schema.SESSION_STATUS; 显示空值或 NULL,说明 TLS 根本没协商上。
必须在 MariaDB 10.6 侧强制开启并约束用户权限
Navicat 能否走 TLS,90% 取决于服务端是否真正要求且可协商。不要只改 Navicat 设置。
- 确认 MariaDB 已启用 SSL 支持:检查
my.cnf中[mysqld]段有无ssl-ca、ssl-cert、ssl-key三项完整路径,且文件可读;运行SHOW VARIABLES LIKE 'have_ssl';返回YES - 强制所有连接走加密通道:在
my.cnf加require_secure_transport=ON,重启服务;否则 Navicat 即使勾选 SSL,仍可能降级走明文 - 给用户加
REQUIRE X509(双向核心):执行ALTER USER 'your_user'@'%' REQUIRE X509;,再FLUSH PRIVILEGES;。此时该用户若不提供有效客户端证书,MariaDB 会直接拒绝认证,而非静默降级 - 注意 Host 匹配:如果 Navicat 填的是
127.0.0.1,权限表里必须有对应'your_user'@'127.0.0.1'记录,'your_user'@'%'不自动覆盖 IP 形式 Host
Navicat 中能配的 TLS 相关项只有三个关键点
Navicat for MySQL(它没有独立 MariaDB 类型)的 SSL 设置藏在连接属性 → “SSH/SSL” 页签,这里没有“客户端证书”入口,所以所谓“双向”只能靠服务端兜底。
- 勾选“使用 SSL”:这是前提,不勾则完全不尝试 TLS 握手
-
“验证 CA”模式下必须指定 CA File:路径填绝对路径,如
/etc/mysql/ssl/ca.pem;若填相对路径或错位,Navicat 会静默忽略 SSL,连上去却无加密 -
不要勾“强制 SSL”除非服务端已设
require_secure_transport=ON:否则 Navicat 会报错SSL connection error: protocol version mismatch或直接断连;它这个选项实际是告诉服务端“我只接受 SSL 连接”,和服务端的require_secure_transport是配套开关
验证是否真走了双向 TLS 的唯一可靠方式
别信 Navicat 界面的“测试连接成功”,得进数据库查实时状态。
- 连接后立即执行:
SELECT Ssl_version, Ssl_cipher, Ssl_verify_mode FROM information_schema.SESSION_STATUS WHERE Variable_name IN ('Ssl_version','Ssl_cipher','Ssl_verify_mode'); - 期望结果:
Ssl_version非空(如TLSv1.2),Ssl_cipher非空(如ECDHE-ECDSA-AES256-SHA384),Ssl_verify_mode = 5(表示服务端验证了客户端证书) - 若
Ssl_verify_mode = 0,说明服务端没配REQUIRE X509或 Navicat 根本没发证书——后者是常态,因为 Navicat 不支持传 client-key - 真正需要双向认证的场景(如金融审计),应换用命令行
mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u user -h host验证通路,再考虑是否值得为 Navicat 写代理层
Navicat 对 TLS 双向认证的支持是残缺的:它能触发服务端的证书验证要求,但无法主动提交客户端证书。所有“开启双向”的操作重心都在 MariaDB 10.6 配置和用户权限上,Navicat 侧只是个被动配合者。最容易被忽略的是 require_secure_transport=ON 和 REQUIRE X509 必须同时存在,缺一不可;只设后者,Navicat 仍可能绕过 TLS 走明文连接。











