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

如何强制PostgreSQL客户端使用SSL连接?本地PG12环境配置问题

PostgreSQL SSL强制连接配置问题及解决方案

环境

Windows 10, localhost, 同一设备
PostgreSQL 12
Node.js 14
OpenSSL 1.1.1k

已参考PostgreSQL官方SSL-TCP配置相关说明完成基础操作。


初始配置

服务端配置文件 postgresql.conf

文件路径:C:\Program Files\PostgreSQL\12\data,为PostgreSQL服务端核心配置文件,配置内容如下:

ssl = on # 服务端会在同一TCP端口监听普通连接和SSL连接,会与接入的客户端协商是否使用SSL
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' 
ssl_prefer_server_ciphers = on
ssl_ca_file = 'root.crt' # 用于要求客户端提供受信任的证书
ssl_crl_file = ''

访问控制配置文件 pg_hba.conf

文件路径:C:\Program Files\PostgreSQL\12\data,用于管控所有数据库客户端的访问权限,初始配置如下:

...
hostssl all             all             127.0.0.1/32 cert clientcert=1
...

测试验证

通过pSQL工具测试,确认连接已走SSL协议:
pSQL SSL连接测试截图


问题表现

简单Node.js测试项目可不使用SSL正常连接数据库,测试代码如下:

require('dotenv').config({ path: './environment/PostgreSql.env'});

const pgp = require('pg-promise')();    

const db = pgp(
    {
        user: process.env.PGuser,
        host: process.env.PGhost,
        database: process.env.PGdatabase,
        password: process.env.PGpassword,
        port: process.env.PGport,
        
        ssl: false  // 非必填,设为true时报错code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
    }
);

var sql = 'select * from current.testssl()';  
db.any(sql)
    .then(
        good => 
        { 
            console.log(good); // ssl设为false可正常获取查询数据
        },
        bad => 
        { 
            console.log(bad); 
/* ssl设为true时报错
at TLSWrap.callbackTrampoline (internal/async_hooks.js:130:17) 
{
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', 
stack: 'Error: unable to verify the first certificate…ckTrampoline (internal/async_hooks.js:130:17)', 
message: 'unable to verify the first certificate'
}
*/
            
        }
    );

最终解决方案

调整pg_hba.conf的访问规则即可实现强制所有连接走SSL协议,注意pg_hba.conf的规则是从上到下匹配生效,拒绝非SSL连接的规则必须放在首行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
hostnossl  all  all  0.0.0.0/0  reject  # 必须放在首行!
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
hostssl all             all             0.0.0.0/0   cert clientcert=verify-full

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:03