5

早上好,

我正在浏览 Postgresql 配置文件,最近注意到有一个ssl选项。我想知道什么时候需要这个。

假设您有一个应用服务器和一个数据库服务器 - 不在专用网络中运行。如果用户尝试登录,如果 SSL 未启用,应用服务器是否会在查找用户名/密码时以明文形式将用户密码传输到数据库?

这里的标准做法是什么?我应该设置我的数据库以使用 SSL 吗?

如果是这种情况,config/database.yml我的 Rails 应用程序中的连接设置有什么不同吗?

谢谢!

4

2 回答 2

7

与其他协议一样,使用 PostgreSQL 的 SSL/TLS 可以保护客户端和服务器之间的连接。是否需要取决于您的网络环境。

如果没有 SSL/TLS,客户端和服务器之间的流量将被窃听者看到:所有查询和响应,可能还有密码,具体取决于您的配置方式pg_hba.conf客户端使用md5的是明文密码还是明文密码)。

据我所知,它是请求 MD5 或明文密码身份验证的服务器,因此在不使用 SSL/TLS 时,活跃的中间人攻击者当然可以降级并获取您的密码。

配置良好的 SSL/TLS 连接应该允许您防止针对密码和数据的窃听和 MITM 攻击。

您可以使用sslhostin要求在服务器端使用 SSL pg_hba.conf,但这只是问题的一部分。最终,就像 Web 服务器一样,由客户端来验证是否使用了 SSL,以及它是否与正确的服务器一起使用。

libpq 文档中的表 31-1总结了您获得的保护级别。

本质上:

  • 如果您认为自己有理由使用 SSL,disableallow无用prefer(如果您想要安全,请不要选择“否”或“可能”)。
  • require几乎没有用,因为它根本不验证远程服务器的身份。
  • verify-ca不验证主机名,这使得它容易受到 MITM 攻击。

如果安全对您很重要,您会想要的是verify-full.

这些 SSL 模式名称由 libpq 设置。其他客户端可能不使用相同的(例如纯 Ruby 实现或 JDBC)。

据我所知,ruby-pg依赖于 libpq。不幸的是,它只为其sslmode. verify-full如果直接通过,也许也可以。但是,还需要一种配置 CA 证书的方法。

于 2013-03-12T14:55:19.967 回答
1

考虑密码以外的数据。如果您使用或不使用,我几乎是一个安全状况问题。你需要你的系统有多安全?如果连接只是通过您的专用网络,那么该网络上的任何人都可以收听。如果可以接受,不使用 SSL,我不会启用它。如果连接超过互联网,则应启用 SSL。

正如@Wooble 所说。在遇到问题时,您永远不应该将密码作为明文发送。在这种情况下,标准解决方案是将哈希存储在数据库中,并且仅发送哈希以进行验证。

是关于导轨部分的 som 链接

于 2013-03-12T13:50:46.313 回答