Navicat 不支持 PostgreSQL 的 cert 认证方式,因其界面缺失 sslcert/sslkey 配置项,无法发送客户端证书;免密连接仅可选 trust(本地开发)或 scram-sha-256 配合 .pgpass 文件;SSL 加密仍需配置 verify-full 模式并确保 root.crt 路径正确、主机名匹配证书 SAN/CN。

不能直接用证书认证实现无密码连接——PostgreSQL 的 SSL 证书认证(cert method)只用于客户端身份验证,但 Navicat 不支持向服务端发送客户端证书(即不提供 sslcert/sslkey 配置项),所以这条路在 Navicat 里走不通。
Navicat 根本不支持 client certificate authentication
PostgreSQL 的 cert 认证方式要求客户端提供有效的客户端证书和私钥,并由服务端 CA 校验。但 Navicat 的 SSL 设置面板里只有:Use SSL、SSL mode、SSL root certificate 这三项,完全缺失 sslcert(客户端证书路径)、sslkey(私钥路径)、sslpassword 等必要字段。这意味着:
- 你无法在 Navicat 中配置客户端证书用于登录
- 即使 PostgreSQL 的
pg_hba.conf写了hostssl all all 0.0.0.0/0 cert,Navicat 也连不上去,会卡在“password authentication failed”或直接拒绝连接 - 试图把
server.crt当作 root.crt 填进去,或乱放证书文件,全无效
想免密连,只能换别的认证方式
Navicat 能真正落地的免密方案只有两种,且都跟证书无关:
-
trust:仅限本地开发环境。修改pg_hba.conf对应行的第 4 列为trust,例如:host all all 127.0.0.1/32 trust。重启 PostgreSQL 后,Navicat 连接时留空密码即可。⚠️生产环境禁用 -
scram-sha-256+.pgpass文件:Linux 下可让 Navicat 复用系统级密码文件。需确保:
–~/.pgpass存在且权限为0600
– 内容格式为:hostname:port:database:username:password(如127.0.0.1:5432:mydb:alice:secret123)
– Navicat 连接时仍要填用户名,但密码栏可为空;PostgreSQL 客户端库会自动查.pgpass
SSL mode = verify-full 和证书路径依然有用
虽然不能靠证书登录,但开启 SSL 加密传输仍是刚需,尤其连远程或云数据库时。这时 verify-full 模式能防中间人劫持:
- 必须填对
SSL root certificate路径,且用正斜杠:/home/user/pg-ssl/root.crt(不能是\home\user\...或含中文路径) - 证书必须是 PEM 格式,以
-----BEGIN CERTIFICATE-----开头 - Navicat 的
Host字段值,必须和证书里的Subject Alternative Name或Common Name完全一致(比如证书写的是db.example.com,你就不能填192.168.1.100) - 服务端
postgresql.conf必须有ssl = on,且pg_hba.conf对应规则要用hostssl或至少带ssl限制(如hostssl all all 0.0.0.0/0 scram-sha-256)
真正卡住人的地方,往往不是不会配,而是误以为 Navicat 支持客户端证书登录——它不支持,这点从界面到文档都毫无提示,得靠试错才能确认。











