SSL/TLS aktivieren und verschlüsselte Verbindungen prüfen (pg_stat_ssl)
PostgreSQLSicherheitBefehl
# Server certificate (self-signed for testing; use a corporate CA in production)
openssl req -new -x509 -days 365 -nodes -subj "/CN=db.example.com" -keyout server.key -out server.crt
chmod 600 server.key # in the data directory, owned by postgres
-- Enable SSL (a reload is enough)
ALTER SYSTEM SET ssl = on;
ALTER SYSTEM SET ssl_cert_file = 'server.crt';
ALTER SYSTEM SET ssl_key_file = 'server.key';
ALTER SYSTEM SET ssl_min_protocol_version = 'TLSv1.2';
SELECT pg_reload_conf();
-- Which connections are encrypted?
SELECT a.pid, a.usename, a.client_addr, a.application_name,
s.ssl, s.version, s.cipher, s.bits
FROM pg_stat_ssl s
JOIN pg_stat_activity a USING (pid)
WHERE a.backend_type = 'client backend'
ORDER BY s.ssl, a.usename;
# On the client, verify the server identity as well
psql "host=db.example.com dbname=postgres user=postgres sslmode=verify-full sslrootcert=root.crt"Was es tut
Aktiviert TLS mit einem Serverzertifikat ohne Neustart, setzt die minimale Protokollversion und listet, ob aktuelle Verbindungen verschlüsselt sind, mit TLS-Version und Cipher.
Wann einsetzen
Für Anforderungen aus Sicherheitsaudits/Compliance (PCI, DSGVO), um Passwörter und Daten bei der Übertragung über das Netzwerk zu schützen.
Vorsicht
ssl = on allein erzwingt keine Verschlüsselung; Clients können sich mit sslmode=prefer/disable weiterhin unverschlüsselt verbinden. Zum Erzwingen in pg_hba.conf hostssl statt host verwenden (und hostnossl ... reject ergänzen). sslmode=require prüft die Identität des Servers nicht (anfällig für MITM); für die Zertifikatsprüfung verify-full verwenden. Die Schlüsseldatei muss dem Benutzer postgres gehören und Modus 0600 haben (oder root gehören mit 0640); sonst wird SSL nicht geladen, also nach dem Reload das Log und SHOW ssl prüfen. Auch Zertifikatserneuerungen werden per Reload übernommen.