navicat 16 连不上 postgresql 的 ssl 连接,八成是未勾选“use ssl”,导致后续证书路径与模式失效;应据服务端能力选 require(仅加密)或 verify-full(校验证书链与主机名),并确保服务端 ssl=on、pg_hba.conf 认证方式匹配(如 scram-sha-256)。
navicat 16 连不上 postgresql 的 ssl 连接,八成不是证书填错了,而是 use ssl 根本没勾上——开关关着,后面所有证书路径、模式全是摆设。
SSL mode 选 require 还是 verify-full?
取决于服务端是否强制校验证书链:
-
require:只要求加密通道,不校验证书有效性;适合自签环境快速连通,但无法防中间人 -
verify-full:必须提供sslrootcert(即 root.crt),且连接时Host字段值必须和证书里的Common Name或Subject Alternative Name完全一致(比如填db.example.com,证书里就不能只写localhost) - 云数据库(如 AWS RDS、阿里云 PolarDB)通常要求
require或更高;本地自建若用自签名证书,verify-full才真正起作用
Navicat 里证书路径总报 file not found
这不是 Navicat 故意刁难,是它对路径解析极度严格:
- 必须用正斜杠
/,哪怕在 Windows 上也要写成C:/certs/root.crt,\会直接失败 - 路径不能含中文、空格、括号(
( ))、波浪号~或环境变量(%USERPROFILE%、$HOME全无效) - 证书文件必须是 PEM 格式(文本格式,以
-----BEGIN CERTIFICATE-----开头),.pfx、.der、.crt.bin都不行 - 推荐路径:Windows 用
C:/pg-ssl/root.crt,macOS 用/Users/you/pg-ssl/root.crt
PostgreSQL 服务端没开 SSL,客户端配再细也没用
先确认服务端状态,别在 Navicat 里反复试错:
- 登录服务器,运行:
SELECT name, setting FROM pg_settings WHERE name LIKE 'ssl%';—— 关键看ssl = on是否为on -
ssl_cert_file和ssl_key_file必须指向真实存在的 PEM 文件,且 PostgreSQL 进程有读权限 - 改完
postgresql.conf必须重启服务(不是pg_reload_conf()),否则配置不生效 -
pg_hba.conf中对应连接规则的第 4 列(method)不能是md5,得是scram-sha-256或cert,否则即使 SSL 通了,认证也会被拒绝
最容易被忽略的一点:Navicat 的 SSL 设置和 pg_hba.conf 认证方式是两套独立逻辑,缺一不可。你可能证书路径全对、mode 选对、服务端 ssl=on,但就因为 pg_hba.conf 里那行 rule 写的是 host all all 0.0.0.0/0 md5,连接照样失败。











