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 | |
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 dapatronieetcdper 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 dietcdtra 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 | |
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 | |
Il risultato è simile al seguente:
1 | |
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 | |
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 | |
Il comando restituisce un risultato simile al seguente:
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 | |
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 | |
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 | |
Che restituisce:
1 2 3 | |
Si recupera poi il contenuto dell'estensione X509v3 Subject Key Identifier della CA /etc/patroni/ca.crt con il comando seguente:
1 | |
Che restituisce:
1 2 3 | |
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.