NodeJS连接PostgreSQL 15.2失败求助:pg_hba.conf无加密条目错误
解决Node.js连接PostgreSQL 15.2(RDS)的"no pg_hba.conf entry...no encryption"错误
问题核心
PostgreSQL 15默认强化了连接安全要求,RDS的PostgreSQL 15可能默认启用了强制SSL,旧配置未指定正确的SSL参数导致连接被拒绝。
解决方案
1. 修正pg模块的连接配置
你使用的是pg模块的Pool,正确的SSL配置需直接在config中添加ssl对象(dialectOptions是Sequelize专属配置,不适用于原生pg模块)。修改后的配置如下:
const config = { user: process.env.PG_DB_USERNAME, password: process.env.PG_DB_PASSWORD, database: process.env.PG_DB_NAME, host: process.env.PG_DB_HOST, port: process.env.PG_DB_PORT, ssl: { rejectUnauthorized: false // 适配RDS自签名证书,若需严格验证可指定证书路径 } } const pool = new Pool(config)
补充:如果你的RDS配置了自定义CA证书,可将
rejectUnauthorized设为true,并添加证书验证参数:ssl: { rejectUnauthorized: true, ca: fs.readFileSync('/path/to/rds-ca-cert.pem').toString() }
2. 检查RDS PostgreSQL的SSL强制设置
登录AWS控制台进入目标RDS实例:
- 切换到配置标签,查看
rds.force_ssl参数是否设为1(此状态下强制要求SSL连接) - 若参数为
1,必须确保客户端SSL配置正确;若需允许非SSL连接(不推荐生产环境),可将rds.force_ssl改为0并重启实例
3. 验证RDS安全组规则
确认你的EC2/本地IP已被添加到RDS安全组的入站规则中,允许PostgreSQL默认端口(5432)的流量通过。
内容的提问来源于stack exchange,提问作者Vinoth Karthick
相关产品推荐
相关产品推荐

