早上好,
我正在浏览Postgresql配置文件,最近注意到有一个ssl
选项。我想知道什么时候需要这个。
假设您有应用服务器和数据库服务器 - 不在专用网络内运行。如果用户尝试登录,如果未启用SSL,那么当查找是否为有效的用户名/密码时,应用服务器是否会以明文形式将用户的密码传输到数据库?
这里的标准做法是什么?我应该设置我的数据库以使用SSL吗?
如果是这种情况,我的Rails应用中的config/database.yml
中的连接设置是否有任何差异?
谢谢!
答案 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总结了您获得的保护级别。
本质:
disable
,allow
和prefer
无用(如果您需要安全性,请不要选择“否”或“可能”) 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部分的索引链接