NestJS TypeOrmModule部署到Heroku报错self signed certificate如何解决
问题解决指南
错误根因
该报错由SSL证书校验失败触发:Heroku官方托管的数据库(如Heroku Postgres)默认使用自签名SSL证书,TypeORM默认会校验SSL证书的权威签发属性,自签名证书无法通过校验,因此抛出连接失败错误。
解决方案
修改app.module.ts中TypeOrmModule的连接配置,新增SSL校验规则即可,推荐使用以下兼容方案:
TypeOrmModule.forRoot({ // 原有配置(type、host、port、username、password、database、entities、synchronize等)保持不变 ssl: true, extra: { ssl: { rejectUnauthorized: false } } })
仅测试场景可临时关闭SSL:将ssl字段设为false即可,Heroku生产环境数据库一般强制要求SSL连接,不推荐长期使用该配置。
后续验证步骤
- 提交修改后的代码重新部署到Heroku
- 查看服务启动日志,确认
TypeOrmModule连接成功的提示输出,无报错即可
异常排查补充
如果修改后仍无法连接,可逐一核对以下配置:
- 确认已正确读取Heroku环境变量中的数据库连接信息,没有硬编码错误的数据库地址、账号密码
- 确认数据库侧已放开公网访问权限,没有限制Heroku的出口IP访问
- 确认TypeORM版本与对应数据库驱动版本兼容,没有版本不匹配导致的SSL参数不生效问题
注意事项
rejectUnauthorized: false仅适配Heroku这类官方托管的自签名证书场景,如果你使用自行部署的数据库,不建议使用该配置,避免存在中间人攻击风险。
内容的提问来源于stack exchange,提问作者Santiago molano perdomo
相关产品推荐
相关产品推荐

