SSL/TLS'i etkinleştir ve şifreli bağlantıları doğrula (pg_stat_ssl)
PostgreSQLGüvenlikKomut
# Sunucu sertifikası (test için self-signed; üretimde kurumsal CA kullan)
openssl req -new -x509 -days 365 -nodes -subj "/CN=db.example.com" -keyout server.key -out server.crt
chmod 600 server.key # data dizininde, sahibi postgres
-- SSL'i aç (reload yeterli)
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();
-- Hangi bağlantılar şifreli?
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;
# İstemcide sunucu kimliğini de doğrula
psql "host=db.example.com dbname=postgres user=postgres sslmode=verify-full sslrootcert=root.crt"Ne yapar?
Sunucu sertifikasıyla TLS'i restart gerektirmeden açar, minimum protokol sürümünü belirler ve mevcut bağlantıların şifreli olup olmadığını, TLS sürümü ve cipher bilgisiyle listeler.
Ne zaman kullanılır?
Güvenlik denetimi/uyumluluk (PCI, KVKK/GDPR) gereksinimlerinde, ağ üzerinden parola ve veri trafiğini korumak için.
Dikkat
ssl = on tek başına şifrelemeyi zorunlu kılmaz; istemci sslmode=prefer/disable ile şifresiz bağlanabilir. Zorunlu kılmak için pg_hba.conf'ta host yerine hostssl kullan (ve hostnossl ... reject ekle). sslmode=require sunucu kimliğini doğrulamaz (MITM'e açık); sertifika doğrulaması için verify-full kullan. Anahtar dosyası postgres kullanıcısına ait ve 0600 (veya root sahipli 0640) olmalıdır; aksi halde SSL yüklenmez, reload sonrası logu ve SHOW ssl çıktısını kontrol et. Sertifika yenilemesi de reload ile alınır.