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

使用pg-node连接Amazon RDS遇认证错误的排查与解决方案问询

问题分析与解决方案

为什么psql能连接但pg库(node-postgres)不行?

psql连接Amazon RDS PostgreSQL时,默认会自动尝试启用SSL,且多数系统已预装AWS根CA证书,能自动验证RDS证书合法性,无需额外配置即可成功连接。而node-postgres(pg库)默认不启用SSL,但RDS的pg_hba.conf默认要求公网连接必须使用加密(SSL),因此未启用SSL的连接会被拒绝,触发no pg_hba.conf entry... no encryption错误。

解决方案

1. 临时排查方案(仅用于测试,禁止生产环境)

设置ssl: { rejectUnauthorized: false }可绕过错误,但存在严重安全风险:

  • 该配置会跳过SSL证书真实性验证,可能遭遇中间人攻击,攻击者可伪造RDS服务器身份,窃取或篡改数据库流量。
  • 代码示例:
const { Client } = require('pg');

const client = new Client({
  host: 'your-rds-endpoint',
  user: 'postgres',
  password: 'your-password',
  database: 'desk_booking',
  ssl: {
    rejectUnauthorized: false
  }
});

2. 生产环境安全方案(推荐)

正确配置SSL证书验证,确保连接安全:

步骤1:获取AWS RDS根CA证书

下载对应你RDS区域的根CA证书文件(如通用的rds-ca-2019-root.pem),可通过AWS控制台或官方文档找到下载入口。

步骤2:配置pg库使用根CA验证

在连接配置中指定根CA文件,启用证书验证:

const { Client } = require('pg');
const fs = require('fs');

const client = new Client({
  host: 'your-rds-endpoint',
  user: 'postgres',
  password: 'your-password',
  database: 'desk_booking',
  ssl: {
    rejectUnauthorized: true,
    ca: fs.readFileSync('./rds-ca-2019-root.pem').toString()
  }
});
  • 说明:该配置强制启用SSL,并验证RDS服务器证书真实性,彻底避免中间人攻击风险,符合生产环境安全要求。

为什么设置ssl: true会报错?

当仅设置ssl: true时,Node.js会使用默认系统CA信任链验证RDS证书,但默认信任链未包含AWS RDS根CA,因此会误判RDS证书为"自签名",触发SELF_SIGNED_CERT_IN_CHAIN错误。手动指定RDS根CA即可解决此问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:04:57