升级Node.js 12至14后,Lambda用pg连PostgreSQL遇证书链错误
解决Node.js 14升级后pg连接PostgreSQL的自签名证书链错误
解决方案1:临时禁用证书验证(仅测试/应急)
在pg客户端配置中添加ssl.rejectUnauthorized: false,跳过证书验证:
const { Client } = require('pg'); const client = new Client({ host: '你的数据库地址', port: 5432, user: '数据库用户名', password: '数据库密码', database: '目标数据库', ssl: { rejectUnauthorized: false } });
注意:生产环境禁止使用该方案,会彻底失去TLS加密的安全性保障。
解决方案2:导入信任的自签名证书(生产环境推荐)
将PostgreSQL的CA证书文件(如root.crt)加入Lambda部署包,然后在连接配置中指定证书路径:
const { Client } = require('pg'); const fs = require('fs'); const client = new Client({ host: '你的数据库地址', port: 5432, user: '数据库用户名', password: '数据库密码', database: '目标数据库', ssl: { ca: fs.readFileSync('./root.crt').toString() // 证书路径根据实际部署位置调整 } });
如果是AWS RDS PostgreSQL,可使用官方提供的RDS根证书,将其放入Lambda代码目录后一起部署。
解决方案3:升级pg包至兼容Node.js 14的版本
旧版pg可能与Node.js 14的TLS实现存在兼容性问题,执行以下命令升级pg:
npm install pg@latest
升级完成后重新测试数据库连接。
问题原因
Node.js 14默认启用了更严格的TLS证书验证规则,而Node.js 12对部分不规范的自签名证书允许通过;同时旧版本pg包的默认配置未适配Node.js 14的验证逻辑,导致升级后触发SELF_SIGNED_CERT_IN_CHAIN错误。
内容的提问来源于stack exchange,提问作者Sandeep Parashar
相关产品推荐
相关产品推荐

