Navicat不解析远程证书,仅按本地绝对路径读取PEM格式CA文件;路径须用正斜杠、无空格中文,且Host必须与证书CN/SAN完全匹配,更新证书后需手动重测连接。
navicat 本身不解析远程服务器证书,它只按你填的本地路径去读文件;所谓“无法识别”,本质是客户端根本没拿到正确的 ca 证书,或路径/格式/权限任一环节断了。
Navicat 从不直接连接 Linux 服务器读取证书
它不会 ssh 过去拉 ca.pem,也不会解析 pg_hba.conf 或 my.cnf 里的路径。所有证书必须提前下载到 Windows 本地,并用绝对路径硬编码进连接配置里。
- Linux 服务端的
ssl_ca(MySQL)、ssl_cert_file(PostgreSQL)或tls-ca-cert-file(Redis)只是给服务端自己用的,Navicat 完全看不见 - 你看到的 “certificate verify failed” 错误,来源永远是 Windows 上 Navicat 进程读取本地
ca.pem后,用它去校验服务端发来的证书链 —— 如果本地没这个文件、路径错、格式不是 PEM、或内容不是真正的根 CA,就必然失败 - 常见误操作:把 Linux 上
/etc/mysql/certs/ca.pem直接填进 Navicat 的 SSL 字段 → 路径无效,Navicat 静默忽略,连接退化为明文或报file not found
Windows 路径写法和文件格式必须严格匹配
Navicat 在 Windows 上对路径和证书格式极其敏感,错一个字符就中断握手。
- 路径必须用正斜杠
/,哪怕在 Windows 上也要写成C:/navicat-certs/mysql-prod-ca.pem;写成C:\navicat-certs\mysql-prod-ca.pem会失败 - 路径不能含空格、中文、括号、波浪号
~或环境变量(如%USERPROFILE%),C:/My Certs/ca.pem和C:/certs/测试/ca.pem全部无效 - 证书文件必须是 PEM 格式(纯文本,以
-----BEGIN CERTIFICATE-----开头),不能是 DER、PFX、JKS;用openssl x509 -in server.crt -text -noout能正常解析才算合格 - 自签名场景下,必须填的是签发服务端证书的 **根 CA 文件**(
ca.pem),不是server.crt或server.pem—— 填错就无法构建信任链
服务端证书内容与 Navicat 连接设置必须一致
即使路径和格式都对,CN 或 SAN 不匹配也会被拒连,且错误提示往往模糊(如 SSL handshake failed)。
- 用
openssl s_client -connect your-db-host:3306 -showcerts(MySQL)或openssl s_client -connect your-db-host:5432 -starttls postgres(PostgreSQL)直连服务端,抓下它实际返回的证书,再用openssl x509 -in cert.pem -text -noout | grep -A1 "Subject Alternative Name\|Subject:"查看 CN 和 SAN 字段 - Navicat 连接设置里的
Host字段值(如db-prod.internal或10.1.2.3)必须和证书里的 CN 或任意一条 SAN 完全一致;填 IP 却证书只写了域名?必失败 - ClickHouse / Redis 等若启用了双向认证(
verificationMode="required"),Navicat 还需提供客户端证书+密钥,但绝大多数生产部署只需单向验证(只填 CA)
最易被忽略的一点:Navicat 不会自动重载证书文件。改了服务端证书、更新了本地 ca.pem,必须手动重新测试连接——它不会监听文件变化,也不会在下次连接时重新读取。


















