DBAtlas · Atlas d'exploitation des bases de données

Activer SSL/TLS et vérifier les connexions chiffrées (pg_stat_ssl)

PostgreSQLSécurité

Commande

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

Ce que fait la commande

Active TLS avec un certificat serveur sans redémarrage, fixe la version minimale du protocole, et indique si les connexions actuelles sont chiffrées, avec la version TLS et le chiffrement utilisé.

Quand l'utiliser

Pour les exigences d'audit de sécurité/de conformité (PCI, RGPD), afin de protéger les mots de passe et les données transitant sur le réseau.

Attention

ssl = on seul n'impose pas le chiffrement ; les clients peuvent encore se connecter sans chiffrement avec sslmode=prefer/disable. Pour l'imposer, utilisez hostssl au lieu de host dans pg_hba.conf (et ajoutez hostnossl ... reject). sslmode=require ne vérifie pas l'identité du serveur (exposé au MITM) ; utilisez verify-full pour la vérification du certificat. Le fichier de clé doit appartenir à l'utilisateur postgres avec le mode 0600 (ou à root avec 0640) ; sinon SSL n'est pas chargé, vérifiez donc le journal et SHOW ssl après le reload. Les renouvellements de certificat sont aussi pris en compte par un reload.

Ouvrir dans DBAtlas →

Voir aussi