You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下pg_dump连接PostgreSQL17证书认证失败的解决方法

Windows Server下pg_dump证书认证连接PostgreSQL 17的SSL错误解决

错误原因分析

  1. 客户端"SSL error: unregistered scheme":PostgreSQL 17 Windows客户端不支持PGSSLROOTCERT=system参数,无法识别Windows系统证书存储,必须指定具体的PEM格式根证书文件。
  2. 服务器端"tlsv1 alert unknown ca":服务器的信任链中没有客户端证书的签发CA——当前客户端证书由服务器自身证书(server.crt)签发,但服务器仅信任DigiCert Global Root G2根证书,因此无法验证客户端证书的合法性。

解决步骤

一、修复根证书配置(解决客户端错误)

  1. 获取DigiCert Global Root G2证书,保存为PEM格式文件(如digicert-root-g2.crt),确保文件包含完整的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----块。
  2. 调整环境变量,替换无效的system参数为实际根证书路径:
set PGSSLCERT=C:\path\to\client.crt
set PGSSLKEY=C:\path\to\client.key
set PGSSLROOTCERT=C:\path\to\digicert-root-g2.crt
  1. 执行pg_dump命令(确保路径正确):
"c:\Program Files\PostgreSQL\17\bin\pg_dump" --verbose -b -f "test.backup" -F c -h server.mydomain.com -p 5432 -U varukoopia mydatabase

二、解决服务器端证书信任问题(核心)

方案1:让服务器信任客户端证书的签发CA

  1. 在PostgreSQL服务器的data目录下找到root.crt文件(默认路径:C:\Program Files\PostgreSQL\17\data\root.crt)。
  2. 将用于签发客户端证书的server.crt内容追加到root.crt末尾(确保是PEM格式)。
  3. 重启PostgreSQL服务,使信任配置生效。

方案2:重新签发合规客户端证书(推荐生产环境)

由于服务器信任DigiCert根证书,建议使用DigiCert或受信任的企业CA重新签发客户端证书:

  1. 使用现有client.key生成CSR(或重新生成密钥对和CSR)。
  2. 将CSR提交给CA签发客户端证书,确保签发CA在服务器的信任链中(DigiCert Global Root G2已在服务器root.crt中)。
  3. 用新签发的client.crt替换旧文件,保持client.key匹配。

三、临时禁用客户端证书CA验证(仅测试用)

如果仅需临时测试连接,可修改服务器pg_hba.conf,跳过客户端证书的签发者验证(生产环境禁止使用):

  1. 修改pg_hba.conf中的认证规则:
hostssl all varukoopia ::/0 trust clientcert=1
hostssl all varukoopia 0.0.0.0/0 trust clientcert=1
  1. 重启PostgreSQL服务,此时服务器仅要求客户端提供证书,但不验证其签发者。

内容的提问来源于stack exchange,提问作者Andrus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:43:16