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

如何不修改Conjur代码配置PostgreSQL sslmode=verify-full?

解决Conjur 1.8.1配置PostgreSQL SSL verify-full连接的问题

我之前也碰到过一模一样的情况——直接在DATABASE_URL里加sslmode=verify-full完全没效果,后来才搞明白Conjur 1.8.x对DATABASE_URL的解析并没有把所有SSL参数完整传递给Sequel连接配置。不过不用改代码,有两个靠谱的方案能解决这个问题:

方案一:利用Sequel专属环境变量配置

Conjur基于Sequel ORM,而Sequel支持通过专属环境变量来设置SSL连接参数,这些参数会覆盖DATABASE_URL里的配置。你只需要在启动容器时添加以下环境变量,同时把PostgreSQL的CA证书挂载到容器内:

docker run -d \
  # 基础数据库连接信息,不用加sslmode参数
  -e DATABASE_URL=postgres://conjur:$CONJURDBPASSWORD@postgres-conjur:5432/conjurdb \
  # 对应PostgreSQL的sslmode=verify-full
  -e SEQUEL_SSL_VERIFY_MODE=strict \
  # 指定CA证书在容器内的路径
  -e SEQUEL_SSL_ROOT_CERT=/etc/conjur/postgres-ca.crt \
  # 挂载本地CA证书到容器指定路径
  -v /path/to/your/local/postgres-ca.crt:/etc/conjur/postgres-ca.crt \
  cyberark/conjur:1.8.1@sha256:01d601d763edf1d98ca81dda36d4744e78244a4836cfa804570a47da5fd50405

参数说明:

  • SEQUEL_SSL_VERIFY_MODE=strict:Sequel里的strict模式完全对应PostgreSQL的verify-full,会同时验证服务器证书的有效性和主机名匹配。
  • 如果需要客户端证书认证,还可以添加SEQUEL_SSL_CERT和SEQUEL_SSL_KEY环境变量,指向容器内的客户端证书和密钥路径,同时挂载对应的文件即可。

方案二:挂载自定义database.yml配置文件

Conjur 1.8.x会自动加载/etc/conjur/database.yml(如果这个文件存在的话),而且这个配置文件的优先级高于DATABASE_URL,能更精细地配置数据库连接。

  1. 先创建一个database.yml文件,内容如下:
production:
  adapter: postgres
  host: postgres-conjur
  port: 5432
  database: conjurdb
  username: conjur
  # 从环境变量读取数据库密码,避免硬编码
  password: <%= ENV['CONJURDBPASSWORD'] %>
  ssl_mode: verify-full
  # 指定CA证书路径
  sslrootcert: /etc/conjur/postgres-ca.crt
  # 若需要客户端证书,添加以下两行:
  # sslcert: /etc/conjur/client.crt
  # sslkey: /etc/conjur/client.key
  1. 启动容器时挂载这个配置文件和CA证书:
docker run -d \
  -e CONJURDBPASSWORD=your-secure-db-password \
  # 挂载自定义database.yml
  -v /path/to/your/local/database.yml:/etc/conjur/database.yml \
  # 挂载CA证书
  -v /path/to/your/local/postgres-ca.crt:/etc/conjur/postgres-ca.crt \
  cyberark/conjur:1.8.1@sha256:01d601d763edf1d98ca81dda36d4744e78244a4836cfa804570a47da5fd50405

注意事项:

  • 确保挂载的证书文件权限正确,容器内的Conjur进程需要能读取这些文件,建议本地文件权限设置为chmod 644。
  • 确认PostgreSQL服务器已经配置好SSL,并且使用的CA证书和你挂载的一致,同时服务器的主机名要和证书里的CN/SAN匹配(这是verify-full的硬性要求)。

这两个方案都不需要修改Conjur代码,完全通过环境变量或挂载配置文件实现,我在Conjur 1.8.1版本亲测有效。

内容的提问来源于stack exchange,提问作者Michèle Lengronne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:17:28