Windows下pg_dump连接PostgreSQL17证书认证失败的解决方法
Windows Server下pg_dump证书认证连接PostgreSQL 17的SSL错误解决
错误原因分析
- 客户端"SSL error: unregistered scheme":PostgreSQL 17 Windows客户端不支持
PGSSLROOTCERT=system参数,无法识别Windows系统证书存储,必须指定具体的PEM格式根证书文件。 - 服务器端"tlsv1 alert unknown ca":服务器的信任链中没有客户端证书的签发CA——当前客户端证书由服务器自身证书(server.crt)签发,但服务器仅信任DigiCert Global Root G2根证书,因此无法验证客户端证书的合法性。
解决步骤
一、修复根证书配置(解决客户端错误)
- 获取DigiCert Global Root G2证书,保存为PEM格式文件(如
digicert-root-g2.crt),确保文件包含完整的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----块。 - 调整环境变量,替换无效的
system参数为实际根证书路径:
set PGSSLCERT=C:\path\to\client.crt set PGSSLKEY=C:\path\to\client.key set PGSSLROOTCERT=C:\path\to\digicert-root-g2.crt
- 执行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
- 在PostgreSQL服务器的
data目录下找到root.crt文件(默认路径:C:\Program Files\PostgreSQL\17\data\root.crt)。 - 将用于签发客户端证书的
server.crt内容追加到root.crt末尾(确保是PEM格式)。 - 重启PostgreSQL服务,使信任配置生效。
方案2:重新签发合规客户端证书(推荐生产环境)
由于服务器信任DigiCert根证书,建议使用DigiCert或受信任的企业CA重新签发客户端证书:
- 使用现有
client.key生成CSR(或重新生成密钥对和CSR)。 - 将CSR提交给CA签发客户端证书,确保签发CA在服务器的信任链中(DigiCert Global Root G2已在服务器
root.crt中)。 - 用新签发的
client.crt替换旧文件,保持client.key匹配。
三、临时禁用客户端证书CA验证(仅测试用)
如果仅需临时测试连接,可修改服务器pg_hba.conf,跳过客户端证书的签发者验证(生产环境禁止使用):
- 修改
pg_hba.conf中的认证规则:
hostssl all varukoopia ::/0 trust clientcert=1 hostssl all varukoopia 0.0.0.0/0 trust clientcert=1
- 重启PostgreSQL服务,此时服务器仅要求客户端提供证书,但不验证其签发者。
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

