如何在JavaScript中创建支持SSL连接PostgreSQL后端的Pool对象
Node.js pg库Pool实例SSL连接PostgreSQL配置方案
pg库的Pool构造函数原生支持SSL连接配置,只需在原有参数中新增ssl配置项即可,不同场景的配置方式如下:
场景1:公共CA签发证书的生产环境(如云托管PostgreSQL服务)
直接将ssl字段设为true即可,驱动会自动信任公共CA签发的证书:
const Pool = require('pg').Pool const pool = new Pool({ user: 'my_user', host: '你的PostgreSQL服务地址', database: 'my_database', password: '你的数据库密码', port: 5432, // 新增SSL配置 ssl: true });
场景2:开发测试环境自签名证书
如果测试环境用的是自签名证书,不需要做证书合法性校验,可按如下配置(该配置存在安全风险,仅可用于开发测试环境,禁止生产环境使用):
const Pool = require('pg').Pool const pool = new Pool({ user: 'my_user', host: '你的PostgreSQL服务地址', database: 'my_database', password: '你的数据库密码', port: 5432, ssl: { rejectUnauthorized: false } });
场景3:自签名证书的生产环境
如果生产环境使用自签名证书,需要指定可信根证书做校验,避免中间人攻击,配置如下:
const fs = require('fs') const Pool = require('pg').Pool const pool = new Pool({ user: 'my_user', host: '你的PostgreSQL服务地址', database: 'my_database', password: '你的数据库密码', port: 5432, ssl: { // 读取服务端根证书内容 ca: fs.readFileSync('/本地证书存放路径/rootCA.pem').toString(), // 如果服务端要求客户端证书验证,再补充以下两个配置项 key: fs.readFileSync('/本地证书存放路径/client-key.pem').toString(), cert: fs.readFileSync('/本地证书存放路径/client-cert.pem').toString() } });
补充说明
- 如果你习惯用连接字符串配置连接,可以直接在串尾添加参数:公共CA场景加
?ssl=true,测试环境不校验证书加?sslmode=no-verify - 上述配置逻辑全平台通用,Windows、Linux、macOS环境无需额外适配
- 该配置仅适用于PostgreSQL的
pg驱动,MySQL等其他数据库的SSL连接需要参考对应驱动的配置规范,不可直接复用
内容的提问来源于stack exchange,提问作者questionto42
相关产品推荐
相关产品推荐

