游乐游手机版
首页/数据库/文章详情

Navicat连接PostgreSQL如何配置SSL证书_加密传输开启方法

时间:2026-04-28 15:03
PostgreSQL连接报错“SSL connection is required”怎么解决 遇到这个报错,先别急着折腾证书。十有八九,问题出在一个更简单的地方:服务器已经明确要求走SSL加密通道,但你的客户端连接工具(比如Na vicat)却压根没打开这个开关。 怎么破?其实就两步。 首先,在Na

PostgreSQL连接报错“SSL connection is required”怎么解决

遇到这个报错,先别急着折腾证书。十有八九,问题出在一个更简单的地方:服务器已经明确要求走SSL加密通道,但你的客户端连接工具(比如Na vicat)却压根没打开这个开关。

怎么破?其实就两步。

首先,在Na vicat的连接配置界面,找到那个“高级”选项卡。点进去,你会看到一个至关重要的复选框——Use SSL。没错,先把它勾上。很多人照着教程填了一堆证书路径,结果连不上,回头一看,恰恰是忘了点这个“总开关”。

勾上之后,旁边的SSL mode下拉菜单就激活了。这里有几个选项,最常用的是requireverify-full

  • require:这是最基本的要求。只要服务端支持SSL,客户端就会启用加密连接,但它不验证服务器证书的真伪。能连上,但安全性稍弱。
  • verify-full:这是推荐的安全模式。它不仅要求加密,还会严格校验服务器证书是否由你信任的机构签发,并且检查你连接的主机名是否与证书上记载的名称一致。当然,这通常需要你提供正确的根证书(SSL root certificate)文件路径。

记住一个关键点:没勾选Use SSL,后面填什么证书路径都是白费功夫。很多教程只教你怎么填路径,却忘了提醒你这个前提,结果让人绕了一大圈弯路。

Na vicat里填的SSL证书路径为什么总提示“file not found”

路径错误,堪称SSL配置路上的“拦路虎”。Na vicat对文件路径的解析相当严格,尤其在Windows和macOS上,几个细节没注意,就会反复提示“文件找不到”。

先确认文件本身:你准备的证书文件(比如root.crt)必须是PEM格式的。如果是PFX或者DER格式,Na vicat可不认。

接下来是路径写法,这里坑最多:

  • 统一用正斜杠:即使你在Windows系统上,也请把路径里的反斜杠(\)全部改成正斜杠(/)。写成C:/certs/root.crt,别写成C:\certs\root.crt
  • 路径要“干净”:整个路径中最好不要出现中文、空格或者括号这些特殊字符。最稳妥的办法,是把证书文件放到一个简单的目录下,比如C:/pg-ssl/
  • 别用缩写和变量:Na vicat不支持像~(代表用户目录)或%USERPROFILE%这类环境变量。所以,~/certs/root.crt或者%USERPROFILE%\certs\root.crt这种写法,统统无效。

说到底,就是给Na vicat一个绝对、清晰、无歧义的文件地址。

PostgreSQL服务端没开SSL,Na vicat硬配证书也没用

客户端配置得再完美,如果数据库服务器那头根本没开启SSL功能,那一切努力都是徒劳。这就像你拿着最先进的钥匙,但门锁压根没装。

所以,先得确认服务端的“开关”打开了。登录到PostgreSQL所在的服务器,执行下面这条SQL命令:

SELECT name, setting FROM pg_settings WHERE name LIKE 'ssl%';

查看结果,关键要看ssl这一项是不是on。同时,ssl_cert_filessl_key_file这两个参数必须指向服务器上真实有效的证书和密钥文件。

如果发现ssloff,那就需要去修改postgresql.conf配置文件,将其改为on,并指定好证书和密钥的路径。这里有个重要提醒:修改这个文件后,必须重启PostgreSQL服务,仅仅重载(reload)配置是不行的。

还有一步经常被忽略:检查pg_hba.conf文件。这个文件控制了客户端的认证方式。找到你对应IP地址的连接规则,看第四列(认证方法)。如果要求SSL,这里通常需要配置为scram-sha-256cert,而不能仅仅是md5

服务端配置,是SSL连接成立的基石,缺一不可。

用 verify-full 模式连不上,但 require 可以,问题出在哪

require连上,说明SSL加密通道本身是通的。换成verify-full就连不上,问题就锁定在“证书验证”这个环节了。这通常意味着证书链不完整,或者主机名对不上。

verify-full模式有两个核心要求:

  1. 信任链要完整:你提供给Na vicat的根证书(root.crt),必须能够验证服务器端证书(server.crt)的合法性。如果你用的是自签名证书,那么root.crt就应该是你自建CA的公钥证书,而不是服务器自己的server.crt
  2. 主机名必须严格匹配:你连接时填的Host地址(比如db.example.com),必须与服务器证书里“Common Name (CN)”或“Subject Alternative Name (SAN)”字段记载的名称完全一致。如果你用localhost或IP地址连接,但证书里写的是域名,验证就会失败。

怎么查证?在服务器上,用这个命令查看证书详情:

openssl x509 -in server.crt -text -noout

然后仔细核对输出的CN和SAN字段。很多时候,连接失败就是因为Na vicat里填的Host和证书里记录的名字“驴唇不对马嘴”。

说到底,SSL连接的调试,最难的不是某个步骤有多复杂,而是容易搞混“客户端”和“服务端”各自的职责范围。pg_hba.conf的认证方式、postgresql.conf的ssl开关,这些是服务端的“权限”和“开关”;而Na vicat里勾选SSL、选择模式、提供证书路径,这是客户端的“配合动作”。两边任何一处没对上,前端的所有操作就都成了无用功。理清这个边界,问题就解决了一大半。

来源:https://www.php.cn/faq/2315293.html
上一篇如何处理MongoDB mongos高CPU占用_大量跨分片排序与内存聚合产生的压力 下一篇如何调试PLSQL代码_SQL Developer断点设置与单步执行
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
金仓数据库逻辑备份实战:全库导出与模式替换全流程
数据库 · 2026-07-03

金仓数据库逻辑备份实战:全库导出与模式替换全流程

在长期的运维实践中,我越来越体会到,备份就像一份保险——平时看似无用,但关键时刻却是唯一的救命稻草。逻辑备份看似简单,可真正执行恢复时,各种陷阱接连浮现:表名大小写不一致、Schema 未正确切换、Owner 属性未同步修改……任何一个环节处理不当,最终恢复出的数据库就会与预期相去甚远。 本文将深入

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复
数据库 · 2026-07-03

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复

干运维这行,逻辑备份和物理备份我都接触过,但说句实在话,真正能在生产环境里扛住事儿的,还得是物理备份。逻辑备份导出的是 SQL 语句,数据量一大,那速度慢得让人抓狂,而且最关键的是,它没法做时间点恢复。物理备份不一样,它直接拷贝数据文件,再配上 WAL 归档日志,想恢复到过去哪一秒都行,这是它最硬核

Windows下将MySQL注册为系统自启服务教程
数据库 · 2026-07-03

Windows下将MySQL注册为系统自启服务教程

先说一个关键前提:务必以管理员身份运行终端,否则 mysqld --install 这条命令几乎不可能成功。问题不在于命令写错,而是 Windows 系统的用户账户控制(UAC)机制会在中途拦截——在普通 CMD 或 PowerShell 窗口执行这条命令,要么直接提示 Access is deni

Mac版Navicat中快速对比两个数据库的表结构异同
数据库 · 2026-07-03

Mac版Navicat中快速对比两个数据库的表结构异同

直接说结论:Mac 版 Navicat 和 Windows 版在表结构比对逻辑上完全一致。但默认配置下,它确实无法承受“全库一键比对上万张表”的压力。要想避免卡死、内存溢出、进度条永远停在 0%,你必须手动将表分批处理,或者利用前缀过滤来控制扫描范围。 为什么 Mac 上点击「结构同步」后界面会卡住

MySQL中UNION操作推荐用UNION ALL的原因
数据库 · 2026-07-03

MySQL中UNION操作推荐用UNION ALL的原因

MySQL中UNION与UNION ALL性能对比:别再被“保险”迷惑,差距远超预期 先给出核心结论:UNION ALL 的性能通常比 UNION 高出不止一个数量级。原因在于,UNION 在合并结果集后会自动触发去重操作,这往往伴随着隐式排序,进而产生临时表和文件排序。而 UNION ALL 则直