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/data

Genera una chiave privata (devi fornire una passphrase).

openssl genrsa -des3 -out server.key 1024

Rimuovi la passphrase.

openssl rsa -in server.key -out server.key

Imposta i permessi e il proprietario appropriati sul file della chiave privata.

chmod 400 server.key  
chown postgres.postgres server.key

Crea 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.crt

Dovrai 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=1

Devi modificare postgresql.conf per attivare effettivamente ssl:

ssl = on

Il server Postgresql deve essere riavviato.

/etc/init.d/postgresql restart

Se 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 1024
openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.key

Poi 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 -CAcreateserial

Copia 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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.