Vai al contenuto

Verifica dei certificati del cluster PostgreSQL

Durante l'installazione, durante un rinnovo o semplicemente per sapere quando scadono i certificati del cluster PostgreSQL, può essere utile esaminare il contenuto dei certificati generati.

I certificati utilizzati dal cluster PostgreSQL sono i seguenti:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/etc/etcd/
├── ca.crt
├── client.crt
├── client.key
├── peer.crt
└── peer.key

/etc/patroni/
├── ca.crt
├── client.crt
└── client.key
ca.crt

Certificato dell'autorità di certificazione radice. Lo stesso certificato è presente nelle directory /etc/patroni/ e /etc/etcd/.

client.crt

Certificato del nodo PostgreSQL. Lo stesso certificato è presente nelle directory /etc/patroni/ e /etc/etcd/. Viene utilizzato da patroni e etcd per le comunicazioni client tra i nodi.

client.key

Chiave associata al certificato client.crt.

peer.crt

Stesso certificato di client.crt. Viene utilizzato per le comunicazioni interne di etcd tra i nodi.

peer.key

Stessa chiave di client.key.

Gli elementi sono quindi tre in tutto:

  • il certificato dell'autorità di certificazione radice (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • il certificato del nodo PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • la chiave associata al certificato del nodo PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Verifica della data di scadenza di un certificato

Per verificare la data di scadenza di un certificato, utilizzare il comando seguente.

È possibile personalizzare la variabile del comando seguente:

Valore personalizzato Variabile Commento
EXPIRY_CERT Percorso del certificato di cui verificare la data di scadenza.

Oppure compilare il campo con uno dei certificati del cluster:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Se la data di scadenza è passata, il certificato è considerato non valido.

Attenzione

Se l'autorità di certificazione che ha emesso il certificato è scaduta, anche il certificato è considerato non valido. Verificare quindi anche la data di scadenza dell'autorità di certificazione.

Esempio

Per verificare la data di scadenza del certificato /etc/patroni/client.crt, si utilizza il comando seguente:

1
openssl x509 -in /etc/patroni/client.crt -noout -enddate

Il risultato è simile al seguente:

1
notAfter=Dec 18 14:04:09 2030 GMT

In questo caso, il certificato scade il 18 dicembre 2030 alle 14:04:09.

Verifica dei nomi alternativi (SAN) di un certificato

Per verificare i SAN (Subject Alternative Names) di un certificato, ovvero i nomi e gli indirizzi IP per i quali è valido, utilizzare il comando seguente.

È possibile personalizzare la variabile del comando seguente:

Valore personalizzato Variabile Commento
SAN_CERT Percorso del certificato di cui verificare i SAN.

Oppure compilare il campo con uno dei certificati del nodo:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Se il nome DNS o l'indirizzo IP utilizzato per connettersi a un nodo non figura nei SAN del suo certificato, la connessione è considerata non valida. Analogamente, quando un nodo apre una connessione verso un altro nodo, se il certificato che presenta non corrisponde al proprio nome DNS o al proprio indirizzo IP, il nodo remoto rifiuta la connessione.

Esempio

Per verificare i SAN del certificato /etc/etcd/peer.crt, si utilizza il comando seguente:

1
openssl x509 -in /etc/etcd/peer.crt -noout -ext subjectAltName

Il comando restituisce un risultato simile al seguente:

1
2
X509v3 Subject Alternative Name:
    DNS:PSQL_VIP, DNS:PSQL_2, IP Address:192.168.1.4, IP Address:192.168.1.2

In questo caso, il certificato copre i nomi DNS PSQL_VIP e PSQL_2, nonché gli indirizzi IP 192.168.1.4 e 192.168.1.2.

Verifica dell'autorità di certificazione che ha emesso un certificato

Quando viene generato un certificato, è possibile aggiungervi l'estensione X509v3 Authority Key Identifier. Questa estensione può memorizzare l'hash della chiave pubblica del suo emittente, che corrisponde al contenuto dell'estensione X509v3 Subject Key Identifier dell'emittente.

Info

I certificati generati seguendo la documentazione di installazione del cluster PostgreSQL dispongono delle estensioni Authority Key Identifier e Subject Key Identifier.

Se queste estensioni sono presenti, è possibile recuperare l'hash della chiave pubblica dell'emittente di un certificato, quindi confrontarlo con l'hash contenuto nell'estensione Subject Key Identifier della CA che si presume abbia emesso il certificato, per confermare che si tratti di quella corretta.

Per recuperare il valore dell'estensione Authority Key Identifier di un certificato, utilizzare il comando seguente.

È possibile personalizzare la variabile del comando seguente:

Valore personalizzato Variabile Commento
ISSUED_CERT Percorso del certificato di cui verificare l'emittente.

Oppure compilare il campo con uno dei certificati del nodo:

1
openssl x509 -in ISSUED_CERT -noout -issuer -ext authorityKeyIdentifier

Info

L'opzione -issuer permette di recuperare il CN del certificato emittente.

Per recuperare il valore dell'estensione Subject Key Identifier di un certificato, utilizzare il comando seguente.

È possibile personalizzare la variabile del comando seguente:

Valore personalizzato Variabile Commento
ISSUER_CA Percorso del certificato dell'autorità di certificazione che si presume sia l'emittente.

Oppure compilare il campo con uno dei certificati dell'autorità di certificazione:

1
openssl x509 -in ISSUER_CA -noout -subject -ext subjectKeyIdentifier

Info

L'opzione -subject permette di recuperare il CN del certificato.

Esempio

Si vuole verificare che la CA che ha firmato il certificato contenuto nel file /etc/patroni/client.crt sia effettivamente quella contenuta nel file /etc/patroni/ca.crt.
Si recupera innanzitutto il contenuto dell'estensione X509v3 Authority Key Identifier del certificato /etc/patroni/client.crt con il comando seguente:

1
openssl x509 -in /etc/patroni/client.crt -noout -issuer -ext authorityKeyIdentifier

Che restituisce:

1
2
3
issuer=CN = BDD-ROOT-CA
X509v3 Authority Key Identifier:
    38:B3:EC:CD:20:90:80:A4:B3:60:F8:E5:7B:98:92:3B:7D:26:06:2B

Si recupera poi il contenuto dell'estensione X509v3 Subject Key Identifier della CA /etc/patroni/ca.crt con il comando seguente:

1
openssl x509 -in /etc/patroni/ca.crt -noout -subject -ext subjectKeyIdentifier

Che restituisce:

1
2
3
subject=CN = BDD-ROOT-CA
X509v3 Subject Key Identifier:
    38:B3:EC:CD:20:90:80:A4:B3:60:F8:E5:7B:98:92:3B:7D:26:06:2B

Confrontando i due risultati, si nota che il Key Identifier e il CN sono identici: il certificato contenuto nel file /etc/patroni/ca.crt è effettivamente la CA che ha firmato il certificato contenuto nel file /etc/patroni/client.crt.