Vai al contenuto

Rinnovo dei certificati del cluster PostgreSQL

Preparativi

Rinnovo del certificato

Prima di eseguire qualsiasi azione sui nodi del cluster PostgreSQL, preparare nuovi certificati per ciascuno dei nodi del cluster. Come promemoria, i certificati devono rispettare diversi vincoli indicati nei prerequisiti del cluster PostgreSQL.

Se si desidera effettuare la modifica a caldo senza alcun impatto sulla produzione, è necessario soddisfare le condizioni seguenti:

  • L'autorità di certificazione non è stata rinnovata dall'ultima generazione dei certificati dei nodi PostgreSQL
  • L'autorità di certificazione non scadrà durante il periodo di validità dei nuovi certificati
  • È ancora possibile generare e firmare certificati con la stessa autorità di certificazione utilizzata al momento della generazione dei precedenti certificati dei nodi PostgreSQL
  • I certificati dei nodi PostgreSQL non sono ancora scaduti

Se queste condizioni sono soddisfatte, è possibile prendere in considerazione un rinnovo dei certificati a caldo senza interrompere la produzione.

Per rigenerare i certificati utilizzando la PKI openssl indicata, facoltativamente, nella documentazione di installazione del cluster PostgreSQL, è necessario riutilizzare la chiave dell'autorità di certificazione e poi rieseguire i comandi di generazione dei certificati.

Se non è possibile rinnovare i certificati a caldo e si utilizza una PKI tramite openssl, si raccomanda di crearne una nuova.

Preparazione dei certificati

Sarà necessario inviare in /tmp/ il certificato dell'autorità di certificazione radice con estensione .crt a ciascuno dei nodi PostgreSQL.

Sarà inoltre necessario inviare in /tmp/ il certificato e la chiave privata associata a ciascuno dei nodi PostgreSQL. Se si dispone di un solo file .p12, eseguire i comandi seguenti per estrarre il certificato (psql.crt) e la chiave privata (psql.key):

1
2
openssl pkcs12 -clcerts -nokeys -out psql.crt -in P12_CERT
openssl pkcs12 -nocerts -out psql.key -in P12_CERT

Sostituire nei comandi precedenti P12_CERT con il nome del proprio file di certificato .p12.

Rinnovo del certificato

Attenzione!

Se è possibile e si desidera effettuare un aggiornamento a caldo dei certificati con un'interruzione minima della produzione (1 minuto + disconnessione degli utenti), sarà necessario:

  • Rinnovare i certificati su ciascun nodo in sequenza
  • Rinnovare i certificati unicamente su un nodo REPLICA (vedere come recuperare le informazioni sul nodo LEADER)
  • Mantenere sempre almeno due nodi PostgreSQL operativi e lavorare sul terzo
  • Per lavorare sul nodo LEADER, commutare il LEADER su un altro nodo; questa azione provoca la disconnessione degli utenti e l'indisponibilità della piattaforma per circa 1 minuto

Per semplificare le azioni seguenti, personalizzare le variabili nei comandi sottostanti con i propri valori (modificare la personalizzazione per ciascun nodo PostgreSQL):

Valore Variabile Definizione
PSQL_CERT Nuovo certificato del nodo PostgreSQL.
PSQL_KEY Chiave associata al nuovo certificato del nodo PostgreSQL.
PSQL_CA Certificato dell'autorità di certificazione radice utilizzata per generare il certificato del nodo PostgreSQL.

Connettersi tramite SSH come root al nodo PostgreSQL di cui si desidera aggiornare i certificati ed eseguire i comandi seguenti per sostituire i certificati:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
cp /tmp/PSQL_CERT /etc/etcd/peer.crt
cp /tmp/PSQL_CERT /etc/etcd/client.crt
cp /tmp/PSQL_CERT /etc/patroni/client.crt
cp /tmp/PSQL_KEY /etc/etcd/peer.key
cp /tmp/PSQL_KEY /etc/etcd/client.key
cp /tmp/PSQL_KEY /etc/patroni/client.key
cp /tmp/PSQL_CA /etc/etcd/ca.crt
cp /tmp/PSQL_CA /etc/patroni/ca.crt
cp /tmp/PSQL_CA /usr/local/share/ca-certificates/PSQL-CA-`date +%G-%m-%d`.crt
update-ca-certificates

Per finalizzare la modifica dei certificati è necessario riavviare il nodo PostgreSQL:

1
reboot