Habilitar SSL/TLS y verificar las conexiones cifradas (pg_stat_ssl)
PostgreSQLSeguridadComando
# 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"Qué hace
Habilita TLS con un certificado de servidor sin reiniciar, fija la versión mínima del protocolo y lista si las conexiones actuales están cifradas, con la versión de TLS y el cipher.
Cuándo usarlo
Para requisitos de auditoría de seguridad/cumplimiento (PCI, GDPR), para proteger las contraseñas y los datos en tránsito por la red.
Precaución
ssl = on por sí solo no obliga al cifrado; los clientes aún pueden conectarse sin cifrar con sslmode=prefer/disable. Para imponerlo, use hostssl en lugar de host en pg_hba.conf (y añada hostnossl ... reject). sslmode=require no verifica la identidad del servidor (expuesto a MITM); use verify-full para verificar el certificado. El archivo de clave debe pertenecer al usuario postgres con modo 0600 (o a root con 0640); de lo contrario SSL no se carga, así que revise el log y SHOW ssl tras el reload. Las renovaciones de certificados también se aplican con un reload.
Relacionado
- Construir una jerarquía de roles de mínimo privilegio (GRANT + ALTER DEFAULT PRIVILEGES)
- Configurar el aislamiento de inquilinos con row-level security
- Validar el orden de las reglas de pg_hba.conf y recargar con seguridad
- Migrar de contraseñas md5 a scram-sha-256
- Mantener logs de auditoría a nivel de rol y de objeto con pgaudit