如何不修改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,能更精细地配置数据库连接。
- 先创建一个
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
- 启动容器时挂载这个配置文件和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
相关产品推荐
相关产品推荐

