与Postgres安全的TCP连接?需要SSL?

时间:2013-03-12 12:48:04

标签: database security postgresql ssl

早上好,

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

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

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

如果是这种情况,我的Rails应用中的config/database.yml中的连接设置是否有任何差异?

谢谢!

2 个答案:

答案 0 :(得分:6)

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

如果没有SSL / TLS,窃听者可以看到客户端和服务器之间的流量:所有查询和响应,以及可能的密码,具体取决于您pg_hba.conf的配置方式({{3} }})。

据我所知the client is using md5 or a plaintext password,所以当不使用SSL / TLS时,一个活跃的中间人攻击者当然可以降级并获取你的密码。

配置良好的SSL / TLS连接应该可以防止密码和数据遭到窃听和MITM攻击。

您可以在sslhost中使用pg_hba.conf要求在服务器端使用SSL,但这只是问题的一部分。最终,it's the server that requests MD5 or plaintext password authentication,由客户端来验证SSL是否被使用,以及它是否与正确的服务器一起使用。

just like for web servers总结了您获得的保护级别。

本质:

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

如果安全对您有影响,您需要的是 verify-full

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

据我所知,Table 31-1 in the libpq documentation依赖于libpq。不幸的是,ruby-pg。如果直接传递,verify-full也许也可能有用。但是,还需要一种配置CA证书的方法。

答案 1 :(得分:0)

考虑密码以外的数据。如果你使用或不使用我几乎是一个安全态势问题。您需要多大安全的系统?如果连接刚好在您的专用网络上,则该网络上的任何人都可以列出。如果可以接受不使用SSL,我就不启用它。如果连接过多,则应启用互联网SSL。

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

Here是关于rails部分的索引链接