Gå till innehållet

Förnya PostgreSQL-clustrets certifikat

Förberedelser

Förnyelse av certifikatet

Innan du utför några åtgärder på PostgreSQL-clustrets noder ska du förbereda nya certifikat för var och en av clustrets noder. Som påminnelse måste certifikaten uppfylla flera villkor som anges i förutsättningarna för PostgreSQL-clustret.

Om du vill göra ändringen i drift utan att påverka produktionen måste du uppfylla följande villkor:

  • Certifikatutfärdaren har inte förnyats sedan den senaste genereringen av certifikaten för PostgreSQL-noderna
  • Certifikatutfärdaren löper inte ut under de nya certifikatens giltighetstid
  • Du kan fortfarande generera och signera certifikat med samma certifikatutfärdare som användes när de tidigare certifikaten för PostgreSQL-noderna genererades
  • Certifikaten för PostgreSQL-noderna har ännu inte löpt ut

Om dessa villkor är uppfyllda kan du överväga att förnya certifikaten i drift utan att avbryta produktionen.

För att generera om certifikaten med den PKI baserad på openssl som valfritt beskrivs i dokumentationen för installationen av PostgreSQL-clustret måste du återanvända certifikatutfärdarens nyckel och därefter köra kommandona för certifikatgenerering igen.

Om det inte är möjligt att förnya certifikaten i drift och du använder en PKI via openssl rekommenderar vi att du skapar en ny.

Förbereda certifikaten

Du måste skicka rotcertifikatutfärdarens certifikat med filändelsen .crt till /tmp/ på var och en av PostgreSQL-noderna.

Du måste också skicka certifikatet och dess tillhörande privata nyckel till /tmp/ på var och en av PostgreSQL-noderna. Om du bara har en .p12-fil tillgänglig kör du följande kommandon för att extrahera certifikatet (psql.crt) och den privata nyckeln (psql.key):

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

Ersätt P12_CERT i de föregående kommandona med namnet på din .p12-certifikatfil.

Förnyelse av certifikatet

Varning!

Om du kan och vill uppdatera certifikaten i drift med minimal driftstörning i produktionen (1 minut + utloggning av användarna) måste du:

  • Förnya certifikaten i tur och ordning på varje nod
  • Endast förnya certifikaten på en REPLICA-nod (se hur du hämtar informationen om noden LEADER)
  • Alltid hålla minst två PostgreSQL-noder i drift och arbeta på den tredje
  • För att arbeta på noden LEADER, växla LEADER till en annan nod; denna åtgärd leder till att användarna loggas ut och att plattformen är otillgänglig i cirka 1 minut

För att förenkla de följande åtgärderna anpassar du variablerna i kommandona nedan med dina värden (anpassningen ska ändras för varje PostgreSQL-nod):

Värde Variabel Definition
PSQL_CERT Nytt certifikat för PostgreSQL-noden.
PSQL_KEY Nyckel som hör till PostgreSQL-nodens nya certifikat.
PSQL_CA Certifikat från den rotcertifikatutfärdare som användes för att generera PostgreSQL-nodens certifikat.

Anslut via SSH som root till den PostgreSQL-nod vars certifikat du vill uppdatera och kör följande kommandon för att ersätta certifikaten:

 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

För att slutföra certifikatändringarna måste du starta om PostgreSQL-noden:

1
reboot