it-swarm.com.de

So überprüfen Sie, ob SSL in Postgresql 9.6 immer verwendet wird

Ich habe eine vertrauliche Anwendung mit App-Server und Datenbank auf separaten Computern und im Fall der Slave-Datenbank in separaten Rechenzentren.

Obwohl ich glaube, dass meine Postgresqls so konfiguriert sind, dass sie immer SSL verwenden, brauche ich eine Möglichkeit, dies zu überprüfen.

Gibt es eine einfache Möglichkeit zu überprüfen, ob alle Clientverbindungen tatsächlich gezwungen sind, ssl zu verwenden?

4
David Simic

Nicht-SSL-Verbindungen können über pg_hba.conf .

Zum Beispiel kann es so beginnen:

# 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...

Die Regeln werden in der Reihenfolge und bis zum ersten Spiel getestet, sodass jede nachfolgende Regel keine Auswirkung hat, wenn eines dieser Spiele übereinstimmt.


Um zu überprüfen, welche Sitzungen verschlüsselt sind, gibt es zur Laufzeit das pg_stat_ssl Systemansicht (seit PostgreSQL 9.5). Die Spalte pid verweist auf pg_stat_activity enthält die anderen Informationen, die für die Identifizierung der Verbindung relevant sein könnten, z. B. usename, datname, client_addr..., damit Sie diese Abfrage verwenden können, zum Beispiel:

SELECT datname,usename, ssl, client_addr 
  FROM pg_stat_ssl
  JOIN pg_stat_activity
    ON pg_stat_ssl.pid = pg_stat_activity.pid;
7
Daniel Vérité

Sie können pg_stat_ssl konsultieren, um sicherzustellen, dass Clients über SSL verbunden sind. Obwohl, wenn Sie denken, dass pg_hba fehlerhaft ist, ich nicht weiß, warum Sie mehr Vertrauen in pg_stat_ssl haben würden. Beachten Sie jedoch, dass dies nur anzeigt, dass der Client über SSL verbunden ist. Auf dem Server kann nicht festgestellt werden, ob der Client tatsächlich eine vollständige Überprüfung des Serverzertifikats durchgeführt hat. (Wenn der Client nicht mit dem richtigen Server, sondern mit einem feindlichen Server verbunden ist, weiß der richtige Server dies natürlich nicht.).

Auf der Client-Seite würden Sie sie so konfigurieren, dass sie sslmode = verify-full verwenden. Um zu testen, ob diese Konfiguration wirksam ist, können Sie ~/.postgresql/root.crt vorübergehend sabotieren, indem Sie sie umbenennen und sicherstellen, dass die Verbindungen fehlschlagen. Da eine Fehlkonfiguration leicht zu bewerkstelligen ist, ist es möglicherweise sicherer, einen eigenen Client zu kompilieren, der die Einstellung von sslmode ignoriert und immer verify-full implementiert.

0
jjanes