Navicat连不上MySQL报SSL错误,八成是服务端未启用SSL或证书链不完整;需先执行SHOW VARIABLES LIKE 'have_ssl'确认是否为YES,再查Ssl_version是否非空,否则客户端配置无效。
navicat连不上mysql,报ssl证书错误,**八成不是navicat配错了,而是服务端根本没开ssl,或证书链不完整**。先验证服务端状态,再动客户端配置,否则纯属白忙。
MySQL服务端是否真启用了SSL
Navicat显示“SSL connection error”或直接卡在握手阶段,第一反应不该是改Navicat设置,而是查MySQL有没有真正加载SSL模块:
- 执行
mysql -u root -p -e "SHOW VARIABLES LIKE 'have_ssl';"—— 返回DISABLED或NO,说明服务端压根没编译/启用SSL支持,填再多证书也没用 - 若返回
YES,继续查SHOW STATUS LIKE 'Ssl%';,重点看Ssl_version是否非空;为空表示MySQL启动时加载了SSL参数但校验失败(比如ssl_key权限是777、路径写错、文件不存在) - Linux下证书路径必须用绝对路径,且MySQL用户(如
mysql)要有读权限;Windows下路径必须用正斜杠/或双反斜杠\,单反斜杠会导致启动静默失败
Navicat里SSL设置项哪些必须填、哪些可以空着
Navicat的SSL页签有4个字段,但**绝大多数场景只需填1个**:
-
SSL CA File:必填,指向服务端的ca.pem(不是自签名就填CA机构发的根证书) -
SSL Cert File和SSL Key File:仅当MySQL用户创建时明确加了REQUIRE X509或REQUIRE CERTIFICATE才需要提供;普通加密传输不需要 -
SSL Cipher:留空即可;填了错误值(如AES256-SHA)反而可能因协商失败导致2026错误 - 如果服务端设置了
require_secure_transport=ON,Navicat就必须走SSL,且不能勾选“允许无效主机名”来绕过验证
自签名证书被拒绝:CN不匹配或未信任
自己用 openssl 生成的证书,在Navicat里常报 SSL certificate validation failed,核心原因就两个:
- 证书里的
CN(Common Name)必须和Navicat连接时填的Host Name完全一致(比如填的是db.example.com,证书CN就不能是localhost或IP) - Navicat默认不信任自签名CA,必须手动指定
SSL CA File指向那个ca.pem;勾选“允许无效主机名”只是跳过CN检查,不解决信任问题 - 抓包验证是否真加密:用
tcpdump -i lo port 3306抓本地连接,如果能看到明文SQL(如SELECT * FROM users),说明SSL根本没生效,大概率是服务端配置漏了ssl_key导致降级
Navicat日志里搜不到Cipher?说明SSL握手根本没走通
连接成功后点Navicat右上角「测试连接」旁的小日志图标,翻到底部搜关键词 Cipher:
- 如果看到类似
ECDHE-RSA-AES128-GCM-SHA256的字符串,说明SSL已启用且协商成功 - 如果完全搜不到
Cipher,或者日志里出现error:14082174(dh key too small),说明服务端SSL配置存在兼容性问题——常见于Navicat 12+与旧版MySQL共用弱DH密钥( - 此时不要硬调Navicat的
SSL Cipher字段去匹配,而应升级服务端:用2048位以上DH参数重生成密钥,或更新MySQL到8.0.28+版本(内置更强默认密码套件)
真正卡住的地方往往不在Navicat界面里那几个输入框,而在MySQL配置文件中那三行:ssl_ca、ssl_cert、ssl_key——路径对不对、权限够不够、文件内容完不完整,任何一个出错都会让SSL静默失效,但Navicat还显示“Connected”。


















