pg gem sslmode=verify-full,将证书放在哪里?[英] pg gem sslmode=verify-full, where to place certificates?

本文是小编为大家收集整理的关于pg gem sslmode=verify-full,将证书放在哪里?的处理方法,想解了pg gem sslmode=verify-full,将证书放在哪里?的问题怎么解决?pg gem sslmode=verify-full,将证书放在哪里?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

pg-gem 有没有办法使用 sslmode = verify-full 进行 postgres 连接?这会像传递那个字符串一样简单吗?我有一个 Rails 应用程序,我想对外部数据库进行完整的 ca 保护 ssl 连接,但我真的不知道如何设置其中的 ca 部分.在 sslmode 上使用 require 会默认使用 ssl 流量,但我不知道我应该在哪里(或在哪个用户下等)放置我的证书以进行验证.我是否应该将它们放在 ~/.postgresql/下,就像在正常的 psql 客户端工作流程中一样,以验证名称为 root.crt 和 postgresql.cert 和 postgresql.key 的 ssl 证书?

如果有帮助的话,我正在使用 Postgres 9.1.

为后来的人编辑:

以下 database.yml 文件似乎可以在我的开发机器上进行测试.我肯定会写一篇关于这个问题的博客文章,因为它是这样一个 PITA 来找出问题所在.

  host: 127.0.0.1
  sslcert: <%= Rails.root.join('config', 'client.crt') %>
  sslkey: <%= Rails.root.join('config', 'client.key') %>
  sslrootcert: <%= Rails.root.join('config', 'root.crt') %>
  sslmode: verify-full
  database: pg-test_development
  username: postgres
  password:

推荐答案

Pg gem 在内部使用 libpq,与 psql 等 PostgreSQL 工具相同的客户端库.

默认情况下,libpq 在 ~/.postgresql/ 中查找 CA 证书.

来自手册:

<块引用>

为了允许服务器证书验证,一个或多个受信任的 CA 的证书必须放在用户主目录中的文件 ~/.postgresql/root.crt 中.(在 Microsoft Windows 上,文件名为 %APPDATA%\postgresql\root.crt.)

...和...

<块引用>

根证书文件和CRL的位置可以通过设置连接参数sslrootcert和sslcrl[...]

AFAIK Rails 将您放入 database.yml 的任何内容传递给 Pg gem,后者将其作为连接参数传递给 libpq.因此,您应该能够将键/值条目添加到您的 database.yml 节中,例如:

sslmode: verify-full
# and if you don't want to use ~/.postgresq/root.crt for the cert location, set:
sslrootcert: /path/to/my/app/root/cert.crt
<小时>

IMO 要求将单个根证书传递给 libpq 是一个设计缺陷.它应该加载一个受信任的证书数据库.使用 SSL 客户端证书存在类似问题,您无法提供密钥库和证书库,您必须为给定主机传递特定文件.听起来这对您来说可能没问题,因为您知道上游证书签名机构.

本文地址:https://www.itbaoku.cn/post/1764202.html