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

CNPG PostgreSQL无法通过LDAPS/STARTTLS完成LDAP认证求助

问题原因分析及解决思路

核心原因:PostgreSQL容器的证书信任链不完整

你遇到的问题本质是PostgreSQL容器未信任Bitnami OpenLDAP的CA证书,导致TLS模式下(LDAPS/STARTTLS)证书验证失败,直接终止连接,未执行后续LDAP绑定操作:

  • 你用ldapsearch测试成功,要么是本地环境已将OpenLDAP的CA证书加入系统信任根,要么是测试时加了忽略证书验证的参数(比如-Z),所以能正常完成TLS握手和绑定。
  • 但CNPG的PostgreSQL容器是最小化镜像,默认只信任公共根CA,而Bitnami OpenLDAP默认使用自签名证书或私有CA颁发的证书,PostgreSQL容器无法找到对应的颁发者,触发“无法获取本地颁发者”错误,进而在TLS握手完成后直接断开连接(对应OpenLDAP日志里的现象),根本没走到LDAP绑定步骤。

解决步骤

  1. 导出OpenLDAP的CA证书
    如果是K8s环境,从OpenLDAP Pod里导出CA证书:

    kubectl exec <openldap-pod-name> -- cat /opt/bitnami/openldap/etc/certs/ca.crt > openldap-ca.crt
    

    如果是Docker环境,用docker cp命令导出容器内的/opt/bitnami/openldap/etc/certs/ca.crt文件。

  2. 让PostgreSQL信任该CA证书
    有两种实用方式:

    • 方式一:挂载证书并配置参数
      在CNPG的Cluster配置中,通过extraVolumes和extraVolumeMounts将CA证书挂载到容器内,然后在postgresql.conf中添加:
      # 针对LDAPS或STARTTLS模式指定CA证书路径
      ldap_ca_cert = '/mnt/openldap-ca/ca.crt'
      # 如果使用STARTTLS模式,需开启该参数
      ldap_starttls = on
      
    • 方式二:将CA证书加入系统信任根
      自定义CNPG的PostgreSQL镜像,把OpenLDAP的CA证书复制到容器的/usr/local/share/ca-certificates/目录,然后运行update-ca-certificates命令更新信任根。
  3. 验证配置
    重启PostgreSQL实例后,尝试用LDAPS或STARTTLS模式登录,同时查看PostgreSQL日志,确认证书验证通过,LDAP绑定正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:20:29