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

Bra*_*don 4 database security postgresql ssl

早上好,

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

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

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

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

谢谢!

Bru*_*uno 6

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

如果没有SSL/TLS的客户端和服务器之间的通信将是窃听者可见:所有的查询和响应,以及可能的密码,这取决于你如何配置你的pg_hba.conf(无论客户端是使用md5或明文密码).

据我所知,这是请求MD5或明文密码验证服务器,所以积极的人在这方面的中间人攻击者肯定会被下调,这和获取您的密码无论如何,没有使用SSL/TLS时.

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

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

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

实质上:

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

如果安全对你很重要,你会想要的那个verify-full.

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

据我所知,ruby-pg依赖于libpq.不幸的是,它只列出了"disable | allow | prefer | require"sslmode.verify-full如果它直接传递,也许也可能有用.但是,还需要一种配置CA证书的方法.