Database SSL · 2 min read · Dec 15, 2025
Certificati SSL per PostgreSQL
Certificati SSL per PostgreSQL
Questo descrive come impostare certificati ssl per abilitare connessioni criptate da PgAdmin su una macchina client a postgresql su una macchina server. L’assunzione è che postgresql (compilato con supporto ssl) e openssl siano già installati e funzionanti sul server (Linux). PgAdmin è già installato sul client (sia Windows che Linux).
Sul server, sono richiesti tre certificati nella directory dei dati. Il valore predefinito di CentOS è /var/lib/pgsql/data/:
root.crt (certificato radice fidato)
server.crt (certificato del server)
server.key (chiave privata)
Esegui i comandi come root.
sudo -cd /var/lib/pgsql/dataGenera una chiave privata (devi fornire una passphrase).
openssl genrsa -des3 -out server.key 1024Rimuovi la passphrase.
openssl rsa -in server.key -out server.keyImposta i permessi e il proprietario appropriati sul file della chiave privata.
chmod 400 server.key
chown postgres.postgres server.keyCrea il certificato del server.
-subj è una scorciatoia per evitare di richiedere le informazioni.
-x509 produce un certificato autofirmato piuttosto che una richiesta di certificato.
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'Poiché stiamo autofirmando, utilizziamo il certificato del server come certificato radice fidato.
cp server.crt root.crtDovrai modificare pg_hba.conf. Ad esempio:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" è solo per connessioni a socket di dominio Unix
local all all trust
# Connessioni locali IPv4:
host all all 127.0.0.1/32 trust
# Connessioni remote IPv4 per utenti autenticati
hostssl all www-data 0.0.0.0/0 md5 clientcert=1
hostssl all postgres 0.0.0.0/0 md5 clientcert=1Devi modificare postgresql.conf per attivare effettivamente ssl:
ssl = onIl server Postgresql deve essere riavviato.
/etc/init.d/postgresql restartSe il server non riesce a (ri)avviarsi, controlla nel log di avvio di postgresql, /var/lib/pgsql/pgstartup.log valore predefinito per CentOS, per il motivo.
Sul client, abbiamo bisogno di tre file. Per Windows, questi file devono trovarsi nella directory %appdata%\postgresql. Per Linux nella directory ~/.postgresql/.
root.crt (certificato radice fidato)
postgresql.crt (certificato del client)
postgresql.key (chiave privata)
Genera i file necessari sulla macchina server e poi copiali sul client. Genereremo i file necessari nella directory /tmp/.
Prima crea la chiave privata postgresql.key per la macchina client e rimuovi la passphrase.
openssl genrsa -des3 -out /tmp/postgresql.key 1024openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.keyPoi crea il certificato postgresql.crt. Deve essere firmato dalla nostra radice fidata (che utilizza il file della chiave privata sulla macchina server). Inoltre, il nome comune del certificato (CN) deve essere impostato sul nome utente del database con cui ci connetteremo.
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserialCopia i tre file che abbiamo creato dalla directory /tmp/ del server alla macchina client.
Copia il certificato radice fidato root.crt dalla macchina server alla macchina client (per Windows pgadmin %appdata%\postgresql\ o per Linux pgadmin ~/.postgresql/). Cambia i permessi del file postgresql.key per limitare l’accesso solo a te (probabilmente non necessario su Windows poiché l’accesso limitato è già ereditato). Rimuovi i file dalla directory /tmp/ del server.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.