【问题标题】:pg gem sslmode=verify-full, where to place certificates?pg gem sslmode=verify-full,在哪里放置证书?
【发布时间】:2015-09-30 01:05:48
【问题描述】:

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:

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4 postgresql-9.1


    【解决方案1】:

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

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

    来自the manual

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

    ...和...

    可以通过设置连接参数sslrootcertsslcrl来更改根证书文件和CRL的位置[...]

    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 客户端证书存在类似问题,您无法提供密钥库和证书库,您必须为给定主机传递特定文件。听起来这对您来说可能没问题,因为您知道上游证书签名机构。

    【讨论】:

    • 病了!谢啦。有什么方法可以配置 postgresql.crt 和密钥文件的位置吗?在手册页中,它指出它们也应该在客户端 /.postgresql 目录中,但我不确定我是否可以将该位置移动到 rails 可以轻松访问的某个位置。我只能获得安全连接以使用我的客户端上的这些密钥和 crt 文件,在这种情况下,它只是在本地主机上进行测试。
    • 检查手册后,我似乎可以将我的签名证书和密钥放在我的 Rails 应用程序中为我的客户的任何地方,并使用 yml 文件中的 sslcert 和 sslkey 修改启动位置,就像进行服务器验证一样.我今天会试试看是否有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-10-22
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    相关资源
    最近更新 更多