Navicat连接PostgreSQL 14提示SSL被强制关闭,主因是pg_hba.conf未用hostssl规则或server.key权限非600;需检查并修正这两项配置,再重载服务而非重启。
navicat 连接 postgresql 14 时提示 ssl 被强制关闭,大概率不是 openssl 版本问题,而是服务端配置或权限问题 —— 直接检查 postgresql.conf 和 pg_hba.conf 比查 openssl 更有效。
pg_hba.conf 中的 host 记录没匹配上 SSL 请求
PostgreSQL 14 默认启用 ssl = on,但若 pg_hba.conf 里对应客户端 IP 的规则仍用 md5(非 SSL 模式),服务端会在协商阶段直接拒绝连接,并在日志中写 SSL connection requested but not supported by server 或类似提示。
- 确认你添加的行是
hostssl all all 0.0.0.0/0 md5,不是host(不带ssl) - 如果只允许特定网段,比如 Navicat 所在机器是
192.168.1.100,应写hostssl all all 192.168.1.100/32 md5 - 修改后必须执行
pg_ctl reload或systemctl reload postgresql,不是 restart —— 否则可能因证书权限问题启动失败
server.key 权限太宽松导致 SSL 初始化失败
PostgreSQL 14 对私钥文件权限极其敏感:若 /etc/postgresql/14/main/server.key 被设为 644 或属组可读,服务启动时会静默失败(日志里明确报 private key file has group or world access),此时即使 pg_hba.conf 写对了,也根本进不到 SSL 协商环节。
- 运行
ls -l /etc/postgresql/14/main/server.key,确认输出中权限字段是-rw-------(即600) - 若不是,立即执行
chmod 600 /etc/postgresql/14/main/server.key - 确保该文件所有者是
postgres用户:chown postgres:postgres /etc/postgresql/14/main/server.key - 注意:
server.crt可以是644,但server.key绝对不能
Navicat 客户端 sslmode 设置与服务端能力不匹配
Navicat 连接窗口里的「SSL」选项本质是控制连接字符串中的 sslmode 参数。若服务端未正确加载证书(比如 ssl_cert_file 路径错、证书格式非法),而客户端又设成 require 或更严模式,就会卡在握手阶段并显示「SSL connection closed」。
- 临时验证是否服务端问题:在 Navicat 连接设置中把 SSL 模式改为
disable,看能否连通(仅测试,勿长期使用) - 若
disable能连,说明服务端 SSL 确实未就绪;再切回require并检查 PostgreSQL 日志里的LOG: could not load private key file类错误 - 常见疏漏:
postgresql.conf中ssl_cert_file和ssl_key_file路径写错、漏掉.crt后缀、路径含空格未加引号
真正卡住人的地方往往不是 OpenSSL 版本(PostgreSQL 14 自带 minimal OpenSSL 绑定逻辑,只要系统 OpenSSL ≥ 1.1.1 就够用),而是 server.key 权限和 pg_hba.conf 规则这两处——它们出错时现象高度相似,但修复动作完全不同,且日志提示分散在不同位置(一个在服务启动日志,一个在连接日志)。务必先看日志,别凭感觉改配置。


















