gpt4 book ai didi

ruby-on-rails-3 - 如何让 Rails 使用 SSL 连接到 PostgreSQL?

转载 作者:行者123 更新时间:2023-11-29 11:10:22 25 4
gpt4 key购买 nike

当我尝试使用 Rails 3.2 项目连接到远程 PostgreSQL 数据库时出现此错误:

FATAL:  no pg_hba.conf entry for host "10.0.0.3", user "projectx", database "projectx", SSL off

我在 Rails 上的配置如下所示:

staging:
adapter: postgresql
database: projectx
username: projectx
password: 123456
host: 10.0.0.3
encoding: utf8
template: template0
min_messages: warning

在 PostgreSQL 上看起来像这样:

hostssl    all             all             0.0.0.0/0            md5
hostssl all all ::/0 md5

两台机器都在 Ubuntu 12.04 上运行。

我发现帖子说它应该自动工作,这显然不会发生。我发现有人说 libpq 没有启用 SSL 并启用它解决了问题,但没有解释如何启用它。当我查看 libpq 的依赖项时,我可以看到它依赖于某些 SSL 包,因此我假设已编译 SSL 支持。

一些帖子建议添加这个:

sslmode: require

或者这个:

sslmode: enabled

启用 ssl 模式,但它对我没有影响。我读到它被默默地忽略了。

我还尝试了数据库字符串方法,结果是:

staging:
adapter: postgresql
database: "host=10.0.0.3 dbname=projectx user=projectx password=123456 sslmode=require"

然后我得到了错误:

could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

这似乎表明 Rails 正在尝试连接到本地主机或者更确切地说,本地 PostgreSQL(没有)而不是 10.0.0.3。

有什么想法吗?

最佳答案

如您所写,通常设置 Ubuntu 12.x 包以便激活 SSL,开箱即用,此外,rails 尝试的第一种方法也是如此。 ,或任何允许 libpq 的客户端处理这些东西,这意味着几乎所有客户。

这种自动启用不一定适用于其他 PostgreSQL 软件包或自编译服务器,因此适用于这些其他上下文的答案或建议对您没有帮助。

由于您的设置应该可以直接运行,因此此答案列出了要检查的事项以找出问题所在。最好使用 psql首先测试连接设置而不是 rails , 这样就可以首先排除一般的 postgresql 问题。

客户端

客户端 sslmode 参数控制连接尝试的顺序。

为了自愿避免使用 SSL,客户端需要输入 sslmode=disable连接字符串中的某处,或 PGSSLMODE=disable在环境中,或者弄乱另一个 PGSSL* 变量。在不太可能的情况下,你的 Rails 进程在其环境中有这个,这可以解释你得到的错误,因为 pg_hba.conf不允许非 SSL 连接。

不尝试 SSL 的另一个原因显然是 libpq没有使用 SSL 支持编译,但 Ubuntu 软件包不是这种情况。

sslmode 的默认值是prefer ,描述为:

prefer (default)

first try an SSL connection; if that fails, try a non-SSL connection

SSL=off在您的错误消息的末尾与失败的最后一次连接尝试有关。可能是 SSL 尝试过但失败了,或者根本没有尝试过,我们无法仅从这条消息中得知。与 SSL=off 的连接尝试根据 pg_hba.conf 中设置的策略通常被服务器拒绝(第一列中的 hostssl)。

问题出在服务器端的可能性更大,因为可能出错的事情更多。

服务器端

以下是服务器端检查的各种内容:

  • 应该有ssl=onpostgresql.conf (默认位置:/etc/postgresql/9.1/main/)

  • 使用 psql 连接到本地主机时,您应该收到这样的消息:

psql (9.1.13)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

  • ca-certificates软件包应该已安装并且是最新的。

  • ssl-cert软件包应该已安装并且是最新的。

  • 在 postgres 数据目录中(默认为 /var/lib/postgresql/9.1/main),应该有软链接(soft link):
    server.crt -> /etc/ssl/certs/ssl-cert-snakeoil.pem或其他有效证书,以及
    server.key -> /etc/ssl/private/ssl-cert-snakeoil.key或另一个有效 key 。

  • /etc/ssl/certs和父目录应该是 postgres 可读和 cd 的。

  • postgres unix 用户应该在 ssl-cert unix 组(检查 id -a postgres )否则无法读取私钥。

  • 如果改变 postgresql.conf ,请确保在进行任何其他测试之前重新启动 postgresql。

  • /var/log/postgresql/postgresql-9.1-main.log 中不应有任何关于 SSL 的可疑消息在启动时或连接尝试失败时。

关于ruby-on-rails-3 - 如何让 Rails 使用 SSL 连接到 PostgreSQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com