Sari la conținut

Verificarea certificatelor clusterului PostgreSQL

În timpul instalării, al unei reînnoiri sau pur și simplu pentru a afla când expiră certificatele clusterului PostgreSQL, poate fi util să examinați conținutul certificatelor generate.

Certificatele utilizate de clusterul PostgreSQL sunt următoarele:

 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

Certificatul autorității de certificare rădăcină. Același certificat este prezent în directoarele /etc/patroni/ și /etc/etcd/.

client.crt

Certificatul nodului PostgreSQL. Același certificat este prezent în directoarele /etc/patroni/ și /etc/etcd/. Este utilizat de patroni și etcd pentru comunicațiile client dintre noduri.

client.key

Cheia asociată certificatului client.crt.

peer.crt

Același certificat ca client.crt. Este utilizat pentru comunicațiile interne etcd dintre noduri.

peer.key

Aceeași cheie ca client.key.

Există, prin urmare, trei elemente în total:

  • certificatul autorității de certificare rădăcină (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • certificatul nodului PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • cheia asociată certificatului nodului PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Verificarea datei de expirare a unui certificat

Pentru a verifica data de expirare a unui certificat, utilizați comanda de mai jos.

Puteți personaliza variabila pentru comanda următoare:

Valoare personalizată Variabilă Comentariu
EXPIRY_CERT Calea certificatului a cărui dată de expirare trebuie verificată.

Sau completați câmpul cu unul dintre certificatele clusterului:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Dacă data de expirare a trecut, certificatul este considerat invalid.

Avertisment

Dacă autoritatea de certificare care a emis certificatul a expirat, certificatul este de asemenea considerat invalid. Verificați, prin urmare, și data de expirare a autorității de certificare.

Exemplu

Pentru a verifica data de expirare a certificatului /etc/patroni/client.crt, utilizăm următoarea comandă:

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

Rezultatul este similar cu acesta:

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

Aici, certificatul expiră pe 18 decembrie 2030, la ora 14:04:09.

Verificarea numelor alternative (SAN) ale unui certificat

Pentru a verifica SAN-urile (Subject Alternative Names) ale unui certificat, adică numele și adresele IP pentru care acesta este valabil, utilizați comanda de mai jos.

Puteți personaliza variabila pentru comanda următoare:

Valoare personalizată Variabilă Comentariu
SAN_CERT Calea certificatului ale cărui SAN-uri trebuie verificate.

Sau completați câmpul cu unul dintre certificatele nodului:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Dacă numele DNS sau adresa IP utilizate pentru conectarea la un nod nu figurează în SAN-urile certificatului său, conexiunea este considerată invalidă. De asemenea, atunci când un nod deschide o conexiune către un alt nod, dacă certificatul pe care îl prezintă nu corespunde propriului său nume DNS sau propriei sale adrese IP, nodul la distanță respinge conexiunea.

Exemplu

Pentru a verifica SAN-urile certificatului /etc/etcd/peer.crt, utilizăm următoarea comandă:

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

Comanda returnează un rezultat similar cu acesta:

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

Aici, certificatul acoperă numele DNS PSQL_VIP și PSQL_2, precum și adresele IP 192.168.1.4 și 192.168.1.2.

Verificarea autorității de certificare care a emis un certificat

Atunci când este generat un certificat, i se poate adăuga extensia X509v3 Authority Key Identifier. Această extensie poate stoca hash-ul cheii publice a emitentului său, care corespunde conținutului extensiei X509v3 Subject Key Identifier a emitentului.

Info

Certificatele generate urmând documentația de instalare a clusterului PostgreSQL au extensiile Authority Key Identifier și Subject Key Identifier.

Dacă aceste extensii sunt prezente, puteți obține hash-ul cheii publice a emitentului unui certificat, apoi îl puteți compara cu hash-ul din extensia Subject Key Identifier a CA care se presupune că a emis certificatul, pentru a confirma că este cea corectă.

Pentru a obține valoarea extensiei Authority Key Identifier a unui certificat, utilizați comanda de mai jos.

Puteți personaliza variabila pentru comanda următoare:

Valoare personalizată Variabilă Comentariu
ISSUED_CERT Calea certificatului al cărui emitent trebuie verificat.

Sau completați câmpul cu unul dintre certificatele nodului:

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

Info

Opțiunea -issuer permite obținerea CN-ului certificatului emitent.

Pentru a obține valoarea extensiei Subject Key Identifier a unui certificat, utilizați comanda de mai jos.

Puteți personaliza variabila pentru comanda următoare:

Valoare personalizată Variabilă Comentariu
ISSUER_CA Calea certificatului autorității de certificare despre care se presupune că este emitentul.

Sau completați câmpul cu unul dintre certificatele autorității de certificare:

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

Info

Opțiunea -subject permite obținerea CN-ului certificatului.

Exemplu

Dorim să verificăm că CA care a semnat certificatul din fișierul /etc/patroni/client.crt este într-adevăr cea din fișierul /etc/patroni/ca.crt.
Obținem mai întâi conținutul extensiei X509v3 Authority Key Identifier a certificatului /etc/patroni/client.crt cu următoarea comandă:

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

Ceea ce returnează:

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

Obținem apoi conținutul extensiei X509v3 Subject Key Identifier a CA /etc/patroni/ca.crt cu următoarea comandă:

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

Ceea ce returnează:

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

Comparând cele două rezultate, constatăm că Key Identifier și CN sunt identice: certificatul din fișierul /etc/patroni/ca.crt este într-adevăr CA care a semnat certificatul din fișierul /etc/patroni/client.crt.