与其他协议一样,使用 PostgreSQL 的 SSL/TLS 可以保护客户端和服务器之间的连接。是否需要取决于您的网络环境。
如果没有 SSL/TLS,窃听者将可以看到客户端和服务器之间的流量:所有查询和响应,可能还包括密码,具体取决于您的配置方式pg_hba.conf
(无论客户正在使用md5或明文密码 http://www.postgresql.org/docs/9.2/static/auth-methods.html).
据我所知,是请求MD5或者明文密码认证的服务器 http://www.postgresql.org/docs/9.2/static/protocol-flow.html#AEN95138,因此,在不使用 SSL/TLS 的情况下,活跃的中间人攻击者肯定可以降级并获取您的密码。
配置良好的 SSL/TLS 连接应该允许您防止针对密码和数据的窃听和 MITM 攻击。
您可以要求在服务器端使用 SSLsslhost
in pg_hba.conf
,但这只是问题的一部分。最终,就像网络服务器一样 https://webmasters.stackexchange.com/a/28443/11628,由客户端来验证是否使用了 SSL,以及是否与正确的服务器一起使用。
libpq 文档中的表 31-1 http://www.postgresql.org/docs/9.2/static/libpq-ssl.html总结了您获得的保护级别。
本质上:
- 如果您认为您有理由使用 SSL,
disable
, allow
and prefer
没有用(如果你想要安全,就不要选择“不”或“也许”)。
-
require
几乎没有用,因为它根本不验证远程服务器的身份。
-
verify-ca
不验证主机名,这使其容易受到 MITM 攻击。
如果安全对您很重要,您会想要的是verify-full
.
这些 SSL 模式名称由 libpq 设置。其他客户端可能不会使用相同的(例如纯 Ruby 实现或 JDBC)。
据我所知,ruby-pg https://bitbucket.org/ged/ruby-pg/wiki/Home依赖于 libpq。不幸的是,它只列出“disable|allow|prefer|require”sslmode http://deveiate.org/code/pg/PG/Connection.html。也许verify-full
如果直接通过的话也可能有效。但是,还需要一种配置 CA 证书的方法。