云环境(如AWS/阿里云RDS)必须选require或verify-full;本地自建库通常选disable;require最常用,不校验证书;verify-full需证书匹配主机名且路径精确无空格中文。
Navicat for Mac 连接 PostgreSQL 时 SSL mode 选哪个才不报错
云环境(如 aws rds、阿里云 rds)默认强制 ssl,本地自建 postgresql 则通常默认 disable。若你连的是云库却选了 disable,会直接报 server does not support ssl, but ssl was required;若连本地库却硬设 verify-full,又会因缺证书路径而失败。
实际应按服务端能力选:
-
require:最常用兜底项。只要服务端开了ssl = on就能连上,不校验证书——适合开发/测试环境 -
verify-ca:要求服务端证书由可信 CA 签发,但不校验主机名。需填sslrootcert路径,适合私有 CA 场景 -
verify-full:最严。除验证 CA 外,还比对证书中subjectAltName是否匹配你填的主机名。填错主机名或证书过期都会断连
Mac 上 Navicat 填 SSL root certificate 总提示 file not found
macOS 下路径解析比 Windows 更敏感,不是“文件存在就行”,而是“路径写法必须精确到字符”。常见失效写法:~/certs/root.crt、/Users/me/certs\root.crt、/Users/me/certs/root.crt (末尾空格)。
必须满足:
- 用正斜杠
/,哪怕在 Finder 中看到的是冒号分隔路径 - 绝对路径,不能含波浪号
~或环境变量 - 路径中无中文、空格、括号、emoji —— 推荐放
/opt/pg-ssl/root.crt这类干净位置 - 证书文件本身是 PEM 格式(文本开头为
-----BEGIN CERTIFICATE-----),不是.pfx或.der
同一个 Navicat 实例里管理多个 PostgreSQL 版本的连接
不同 PostgreSQL 版本(比如 12、14、16)可能部署在不同服务器,或同一台机器不同端口,且 SSL 配置各异。Navicat 不靠“版本号”区分,而是靠连接属性组合识别。
关键操作点:
- 每个连接单独配置:进「连接」→「编辑」→「SSL」选项卡 → 勾选
Use SSL→ 选对应SSL mode→ 填对sslrootcert(仅verify-ca/verify-full需要) - 别共用连接配置文件:复制已有连接后,务必手动修改主机、端口、SSL mode 和证书路径,否则容易误连旧环境
- 用「管理连接」功能分组:右键连接 →「管理组」→ 新建组(如
prod-pg16-ssl、dev-pg12-no-ssl),避免混点
verify-full 模式连不上,但 require 可以,问题一定出在证书链或主机名
这说明服务端 SSL 已通,客户端也启用了加密,只是校验环节失败。不要怀疑 Navicat 设置是否生效,重点查两端一致性:
- Navicat 填的「主机名」必须和证书里
subjectAltName完全一致(区分大小写、不含端口),例如填pg-prod.example.com,就不能填pg-prod或pg-prod.example.com:5432 - 服务端证书是否由你提供的
root.crt所属 CA 签发?可用命令验证:openssl verify -CAfile /opt/pg-ssl/root.crt server.crt - 如果服务端用的是自签名证书,
verify-full会失败——此时要么换verify-ca,要么把自签 CA 加进系统信任库(不推荐)
最易被忽略的一点:Navicat 的「SSL」选项卡里勾了 Use SSL,但没保存连接设置就点「测试连接」,会导致测试时仍用旧配置。每次改完 SSL 相关项,务必点「确定」再测。











