如何验证 SSL 始终在 Postgresql 9.6 上使用

Dav*_*mic 8 postgresql ssl postgresql-9.6

我在不同的机器上有一个带有应用程序服务器和数据库的敏感应用程序,在从数据库的情况下,在不同的数据中心。

尽管我相信我的 postgresqls 被配置为始终使用 ssl,但我需要一种方法来仔细检查这一点。

是否有一些简单的方法可以检查所有客户端连接是否确实被迫使用 ssl?

Dan*_*ité 15

可以通过 禁用非 SSL 连接pg_hba.conf

例如,它可能像这样开始:

# allow local connections through Unix domain sockets
local  all  all  peer

# allow non-encrypted local TCP connections with passwords
host       all  all  127.0.0.1/32   md5
host       all  all  ::1/128        md5

# reject any other non-encrypted TCP connection
hostnossl  all  all  0.0.0.0/0     reject
hostnossl  all  all  ::/0          reject

# other rules...
Run Code Online (Sandbox Code Playgroud)

规则按顺序进行测试,直到第一次匹配,因此当这些匹配中的一个匹配时,这些之后的任何规则都将无效。


在运行时,要检查哪些会话被加密,有pg_stat_ssl系统视图(自 PostgreSQL 9.5 起)。它的pid列是一个引用, pg_stat_activity其中包含可能与识别连接相关的其他信息位,例如usename, datname, client_addr...,因此您可以使用此查询,例如:

SELECT datname,usename, ssl, client_addr 
  FROM pg_stat_ssl
  JOIN pg_stat_activity
    ON pg_stat_ssl.pid = pg_stat_activity.pid;
Run Code Online (Sandbox Code Playgroud)