Navicat连接MongoDB报“SSL handshake failed”需先勾选Use SSL,再根据服务端SSL模式配置CA File(必填)、Client Certificate和Private Key(按需),并确保路径正确、TLS版本兼容。
MongoDB连接报错“SSL handshake failed”怎么办
navicat 默认不启用 ssl,直连 mongodb 时若服务端强制要求加密(如 atlas、企业版或自建 tls 配置),就会卡在握手阶段,错误信息通常是 ssl handshake failed 或 connection refused due to invalid certificate。这不是 navicat 不支持,而是没配对证书链或没开开关。
- 确认 MongoDB 服务端是否真启用了 SSL:查
mongod.conf中net.ssl.mode是否为requireSSL或preferSSL - Navicat 连接窗口里,“SSL”选项卡必须勾选
Use SSL,否则所有证书字段都灰掉——这是最常漏的一步 - 如果服务端用的是自签名证书(比如本地测试用
openssl req生成的),必须填CA File,不能只填Client Certificate或留空 - 证书路径必须是 Navicat 所在机器上的**绝对路径**,且 Navicat 进程有读取权限;Windows 上反斜杠要写成正斜杠或双反斜杠,例如
C:/certs/ca.pem
CA File / Client Certificate / Private Key 分别填什么
这三个字段不是全都要填,取决于 MongoDB 的 SSL 模式和服务端配置策略。填错会导致连接直接失败,且错误提示几乎一样,很难区分。
-
CA File:必填项(除非服务端用公共 CA 签发,且 Navicat 内置信任)。内容是根证书或中间证书的 PEM 文件,用于验证服务端证书合法性 -
Client Certificate:仅当服务端设置了net.ssl.weakCertificateValidation: false且启用了双向认证(net.ssl.clientCertificateTLS: true)时才需要。一般云服务(如 MongoDB Atlas)不要求客户端证书 -
Private Key:只有填了Client Certificate时才需配套提供,且必须与证书配对;密钥不能加密(即不能带 passphrase),否则 Navicat 无法自动解密
Atlas 连接时为什么总提示“certificate verify failed”
MongoDB Atlas 默认使用 Let’s Encrypt 证书,理论上 Navicat 应该信任,但实际常因系统级 CA 证书库未更新或 Navicat 自带证书包过旧而失败。
- 优先尝试不填任何证书路径,只勾选
Use SSL+Verify full server certificate chain关闭(即不校验主机名)——这能绕过hostname doesn't match类错误 - 如果仍报错,下载最新 Let’s Encrypt 根证书(
isrgrootx1.pem)到本地,填入CA File;注意不要用过期的DST Root CA X3 - Atlas 连接字符串里的域名必须和证书 Subject Alternative Name 匹配,例如
cluster0.xxxxx.mongodb.net,少一个字符或换成了 IP 就会触发校验失败 - macOS 用户特别注意:Navicat for Mac 有时读不到系统钥匙串里的 CA,务必手动指定
CA File
开启 SSL 后连接变慢或超时
加了 SSL 不等于安全了,反而可能因证书链校验、TLS 版本协商或网络中间设备拦截导致延迟飙升甚至连接中断。
- 检查 Navicat 使用的 TLS 版本:老版本(v15 及以前)默认 TLS 1.0/1.1,而现代 MongoDB(4.4+)已禁用;升级 Navicat 到 v16+ 可自动协商 TLS 1.2/1.3
- 关闭
Verify full server certificate chain能显著提速,但代价是不校验证书是否被吊销、是否由可信 CA 签发——生产环境慎用 - 如果服务端部署在内网且证书是私有 CA 签发,把该 CA 加入操作系统信任库比每次在 Navicat 里指定
CA File更稳定 - 某些防火墙或代理会干扰 TLS 握手,可临时用
mongosh --tls --tlsCAFile ca.pem对比测试,排除 Navicat 特有问题
证书路径、TLS 版本、单向/双向认证这三者的组合非常容易互相掩盖真实问题。调不通时,先关掉所有校验选项,再一项一项打开,比反复改一堆字段更省时间。










