2013-03-12 24 views
4

早上好,与Postgres安全的TCP连接?需要SSL吗?

我正在通过Postgresql配置文件,最近发现有一个ssl选项。我想知道这是什么时候需要的。

说出是否有应用程序服务器和数据库服务器 - 不在专用网络中运行。如果用户尝试登录,如果SSL未启用,则应用服务器在查询其是否有效的用户名/密码时,将明文中的用户密码传输到数据库?

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

如果是这样,那么在我的Rails应用程序中,config/database.yml中的连接设置是否有区别?

谢谢!

+0

@Wooble显然这是一个人为的例子。有多种原因希望加密应用程序服务器和数据库之间的流量,即使使用散列密码也是如此。不幸的是,你的评论没有丝毫有用。 – Brandon 2013-03-12 16:56:55

回答

6

像其他协议索姆链接,使用SSL/TLS对PostgreSQL允许您以确保客户端与服务器之间的连接。您是否需要它取决于您的网络环境。

没有SSL/TLS,窃听者可以看到客户端和服务器之间的流量:所有的查询和响应,以及可能的密码,取决于您配置pg_hba.conf(是否the client is using md5 or a plaintext password)的方式。

据我所知,it's the server that requests MD5 or plaintext password authentication,所以当不使用SSL/TLS时,一个活跃的中间人攻击者可以降级并获取密码。

一个配置良好的SSL/TLS连接应该能够防止密码和数据的窃听和MITM攻击。

您可以要求使用SSL在服务器端使用sslhostpg_hba.conf,但这只是问题的一部分。最终,just like for web servers,这完全取决于客户端验证SSL,并且它与正确的服务器一起使用。

Table 31-1 in the libpq documentation总结了您获得的保护级别。

本质:

  • ,如果你认为你有一个理由使用SSL,disableallowprefer是无用的(不带“否”或“也许”,如果你想安全)。
  • require几乎没有用,因为它根本不验证远程服务器的身份。
  • verify-ca不验证主机名,这使得它易受MITM攻击。

如果安全问题给您的是verify-full你想要的。

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

据我所知,ruby-pg依赖于libpq。不幸的是,它only lists "disable|allow|prefer|require" for its sslmode。如果直接传递,也许verify-full也可以工作。但是,还需要一种配置CA证书的方法。

+0

感谢您的有用答案,直接回答了我的问题! – Brandon 2013-03-12 16:59:19

+0

“*如果用户尝试登录,如果SSL未启用,则应用服务器将以明文*传输用户密码”,我还应该说我指的是PostgreSQL用户,它通常与应用程序用户不同(应用程序用户可能指的是作为数据存储在数据库中的东西:这是安全的是不同的事情)。 – Bruno 2013-03-12 17:05:36

0

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

正如@Wooble所说。您不应该首先将密码作为明文发送出去。在这种情况下,stanard解决方案是将散列存储在数据库中,并仅发送散列以进行验证。

Here是关于轨道部分