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

客户端到pgBouncer 1.17.0证书认证失败:用户与CN映射方案咨询

解决pgBouncer证书CN与登录用户不匹配的认证问题

核心方案:通过auth_query实现动态映射

pgBouncer不支持PostgreSQLpg_ident.conf那样的静态映射,但可以用**数据库查询认证(auth_query)**实现证书CN到登录用户的映射,这也是兼顾安全与灵活性的最优方式,具体步骤如下:

  1. 配置pgBouncer启用查询认证
    在pgbouncer.ini中修改或添加以下配置:

    auth_type = cert
    auth_query = SELECT usename, passwd FROM pg_shadow WHERE usename = $1
    auth_user = pgbouncer_auth
    
    • auth_type = cert:先启用证书有效性校验
    • auth_query:指定认证查询语句,后续可扩展为映射查询
    • auth_user:需在PostgreSQL中创建专用查询用户,仅授予读取pg_shadow及映射表的权限
  2. 创建映射表实现CN到用户的关联
    在PostgreSQL中新建映射表管理CN与登录用户的对应关系:

    CREATE TABLE pgbouncer_cert_mappings (
        cert_cn TEXT PRIMARY KEY,
        pg_username TEXT NOT NULL REFERENCES pg_user(usename)
    );
    

    插入映射记录:

    INSERT INTO pgbouncer_cert_mappings (cert_cn, pg_username) VALUES ('abc', 'joe');
    

    随后修改auth_query,让pgBouncer通过证书CN查找对应用户:

    auth_query = SELECT cm.pg_username, p.passwd 
                 FROM pgbouncer_cert_mappings cm
                 JOIN pg_shadow p ON cm.pg_username = p.usename
                 WHERE cm.cert_cn = $1
    

    客户端连接时,pgBouncer会自动将证书CN代入$1,完成映射与认证。

  3. 确保TLS客户端校验配置正确
    确认pgBouncer已启用严格的客户端证书校验:

    client_tls_sslmode = verify-full
    client_tls_ca_file = /path/to/rootCA.pem
    client_tls_cert_file = /path/to/pgbouncer_cert.pem
    client_tls_key_file = /path/to/pgbouncer_key.pem
    

其他场景适配方案

  • 静态映射文件(适合少量固定映射)
    如果映射关系很少且无需动态变更,可使用auth_file配置静态映射:
    新建pgbouncer_auth.txt,每行格式为"cert_cn" "pg_username":

    "abc" "joe"
    "def" "jane"
    

    然后在pgbouncer.ini中配置:

    auth_type = cert
    auth_file = /path/to/pgbouncer_auth.txt
    
  • 直接调整证书CN(最直接的简化方案)
    如果场景允许,重新签发客户端证书,将CN设置为目标登录用户名(如joe),可直接跳过映射步骤。

安全注意事项

  • 严格限制pgbouncer_auth用户的权限,仅授予必要的表读取权限,避免敏感数据泄露
  • 定期清理无效的证书CN与用户映射关系
  • 强制启用verify-full模式,确保客户端证书由可信CA签发,防止伪造证书攻击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:50:24