Включить SSL/TLS и проверить шифрование подключений (pg_stat_ssl)
PostgreSQLБезопасностьКоманда
# 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"Что делает
Включает TLS с сертификатом сервера без перезапуска, задаёт минимальную версию протокола и показывает, зашифрованы ли текущие подключения, с версией TLS и шифром.
Когда использовать
Для требований аудита безопасности/соответствия (PCI, GDPR), для защиты паролей и данных при передаче по сети.
Внимание
Одного ssl = on недостаточно для принудительного шифрования; клиенты по-прежнему могут подключаться без шифрования с sslmode=prefer/disable. Для принудительного шифрования используйте в pg_hba.conf hostssl вместо host (и добавьте hostnossl ... reject). sslmode=require не проверяет подлинность сервера (уязвимо для MITM); для проверки сертификата используйте verify-full. Файл ключа должен принадлежать пользователю postgres с правами 0600 (или root с 0640); иначе SSL не загружается, поэтому после reload проверьте журнал и SHOW ssl. Обновление сертификатов также подхватывается через reload.
Связанные материалы
- Построить иерархию ролей с минимальными привилегиями (GRANT + ALTER DEFAULT PRIVILEGES)
- Настроить изоляцию арендаторов (tenant) через row-level security
- Проверить порядок правил pg_hba.conf и безопасно перечитать конфигурацию
- Перейти с паролей md5 на scram-sha-256
- Вести журналы аудита на уровне ролей и объектов через pgaudit