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

Heroku平台PostgreSQL数据库连接失败求助:SSL及pg_hba.conf问题

解决Heroku PostgreSQL连接的SSL证书验证失败及pg_hba.conf错误

我来帮你拆解这个问题——你遇到的是Heroku PostgreSQL强制SSL连接的配置限制,加上客户端证书验证的小问题,下面一步步给你解决:

错误原因拆解

  • Heroku的PostgreSQL实例默认拒绝所有非SSL的外部连接,所以你不带SSL参数连接时,会触发no pg_hba.conf entry... SSL off的报错——这是Heroku服务器端的配置规则,不是你本地pg_hba.conf的问题。
  • SSL error: certificate verify failed则是因为psql客户端无法识别Heroku PostgreSQL使用的SSL根证书,要么是本地缺少对应证书,要么是没正确配置SSL验证模式。

解决方案

1. 最省心的方法:用Heroku CLI一键连接

Heroku提供了专门的数据库连接命令,会自动帮你配置好所有SSL参数,完全不用手动折腾:

# 把your-app-name替换成你的Heroku应用名称
heroku pg:psql -a your-app-name

执行后直接就能进入psql会话,连主机、用户名这些都不用自己输。

2. 手动用psql连接(适合需要自定义参数的场景)

如果你必须用原生psql命令,有两种处理方式:

方式一:跳过证书验证(快速测试用,不推荐生产环境)

添加sslmode=require参数,告诉psql启用SSL但暂时跳过证书验证:

# 替换成你的数据库连接信息
psql "host=your-heroku-pg-host port=5432 dbname=my_db user=first password=你的数据库密码 sslmode=require"

你也可以直接用Heroku提供的完整连接URL,里面已经包含了所有必要参数:

# 替换成你的应用名称
psql $(heroku config:get DATABASE_URL -a your-app-name)

方式二:用根证书验证(生产环境推荐)

如果需要严格的证书验证,你需要用到Heroku PostgreSQL使用的DigiCert Global Root CA证书,然后指定证书路径:

# 替换成你的数据库信息和证书路径
psql "host=your-heroku-pg-host port=5432 dbname=my_db user=first password=你的数据库密码 sslmode=verify-full sslrootcert=/本地证书路径/DigiCertGlobalRootCA.crt.pem"

大多数操作系统已经预装了这个根证书,你可以在系统证书库中找到它,或者从正规渠道下载(注意不要用不明来源的证书)。

3. 额外优化:更新你的Heroku CLI

你的CLI版本是7.0.22,这个版本比较老旧了,可能存在一些SSL兼容性问题。建议更新到最新版本:

heroku update

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:53:53