Preskoči na sadržaj

Provjera certifikata klastera PostgreSQL

Tijekom instalacije, tijekom obnove ili jednostavno da biste saznali kada istječu certifikati klastera PostgreSQL, može biti korisno pregledati sadržaj generiranih certifikata.

Klaster PostgreSQL koristi sljedeće certifikate:

 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

Certifikat korijenskog certifikacijskog tijela. Isti se certifikat nalazi u direktorijima /etc/patroni/ i /etc/etcd/.

client.crt

Certifikat čvora PostgreSQL. Isti se certifikat nalazi u direktorijima /etc/patroni/ i /etc/etcd/. Koriste ga patroni i etcd za klijentsku komunikaciju između čvorova.

client.key

Ključ pridružen certifikatu client.crt.

peer.crt

Isti certifikat kao client.crt. Koristi se za internu komunikaciju etcd između čvorova.

peer.key

Isti ključ kao client.key.

Ukupno postoje, dakle, tri stavke:

  • certifikat korijenskog certifikacijskog tijela (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • certifikat čvora PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • ključ pridružen certifikatu čvora PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Provjera datuma isteka certifikata

Da biste provjerili datum isteka certifikata, upotrijebite naredbu u nastavku.

Varijablu za sljedeću naredbu možete prilagoditi:

Prilagođena vrijednost Varijabla Komentar
EXPIRY_CERT Put certifikata čiji datum isteka želite provjeriti.

Ili ispunite polje jednim od certifikata klastera:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Ako je datum isteka prošao, certifikat se smatra nevažećim.

Upozorenje

Ako je isteklo certifikacijsko tijelo koje je izdalo certifikat, i certifikat se smatra nevažećim. Stoga provjerite i datum isteka certifikacijskog tijela.

Primjer

Da bismo provjerili datum isteka certifikata /etc/patroni/client.crt, koristimo sljedeću naredbu:

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

Rezultat je sličan sljedećem:

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

Ovdje certifikat istječe 18. prosinca 2030. u 14:04:09.

Provjera alternativnih naziva subjekta (SAN) certifikata

Da biste provjerili nazive SAN (Subject Alternative Names) certifikata, odnosno nazive i IP adrese za koje certifikat vrijedi, upotrijebite naredbu u nastavku.

Varijablu za sljedeću naredbu možete prilagoditi:

Prilagođena vrijednost Varijabla Komentar
SAN_CERT Put certifikata čije nazive SAN želite provjeriti.

Ili ispunite polje jednim od certifikata čvora:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Ako DNS naziv ili IP adresa upotrijebljeni za povezivanje s čvorom nisu među nazivima SAN njegova certifikata, veza se smatra nevažećom. Isto tako, kada čvor otvara vezu s drugim čvorom, a certifikat koji predočava ne odgovara njegovu vlastitom DNS nazivu ili IP adresi, udaljeni čvor odbija vezu.

Primjer

Da bismo provjerili nazive SAN certifikata /etc/etcd/peer.crt, koristimo sljedeću naredbu:

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

Naredba vraća rezultat sličan sljedećem:

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

Ovdje certifikat obuhvaća DNS nazive PSQL_VIP i PSQL_2 te IP adrese 192.168.1.4 i 192.168.1.2.

Provjera koje je certifikacijsko tijelo izdalo certifikat

Pri generiranju certifikata može mu se dodati proširenje X509v3 Authority Key Identifier. To proširenje može pohraniti sažetak javnog ključa izdavatelja, koji odgovara sadržaju proširenja X509v3 Subject Key Identifier izdavatelja.

Informacije

Certifikati generirani prema dokumentaciji za instalaciju klastera PostgreSQL imaju proširenja Authority Key Identifier i Subject Key Identifier.

Ako su ta proširenja prisutna, možete dohvatiti sažetak javnog ključa izdavatelja certifikata, a zatim ga usporediti sa sažetkom u proširenju Subject Key Identifier certifikacijskog tijela (CA) koje je trebalo izdati certifikat kako biste potvrdili da je riječ o pravom tijelu.

Da biste dohvatili vrijednost proširenja Authority Key Identifier certifikata, upotrijebite naredbu u nastavku.

Varijablu za sljedeću naredbu možete prilagoditi:

Prilagođena vrijednost Varijabla Komentar
ISSUED_CERT Put certifikata čijeg izdavatelja želite provjeriti.

Ili ispunite polje jednim od certifikata čvora:

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

Informacije

Mogućnost -issuer dohvaća CN certifikata izdavatelja.

Da biste dohvatili vrijednost proširenja Subject Key Identifier certifikata, upotrijebite naredbu u nastavku.

Varijablu za sljedeću naredbu možete prilagoditi:

Prilagođena vrijednost Varijabla Komentar
ISSUER_CA Put certifikata certifikacijskog tijela za koje se pretpostavlja da je izdavatelj.

Ili ispunite polje jednim od certifikata certifikacijskog tijela:

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

Informacije

Mogućnost -subject dohvaća CN certifikata.

Primjer

Želimo provjeriti je li certifikacijsko tijelo (CA) koje je potpisalo certifikat u datoteci /etc/patroni/client.crt doista ono iz datoteke /etc/patroni/ca.crt.
Najprije dohvaćamo sadržaj proširenja X509v3 Authority Key Identifier certifikata /etc/patroni/client.crt sljedećom naredbom:

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

Naredba vraća:

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

Zatim dohvaćamo sadržaj proširenja X509v3 Subject Key Identifier certifikacijskog tijela /etc/patroni/ca.crt sljedećom naredbom:

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

Naredba vraća:

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

Usporedba dvaju rezultata pokazuje da su Key Identifier i CN identični: certifikat u datoteci /etc/patroni/ca.crt doista je certifikacijsko tijelo koje je potpisalo certifikat u datoteci /etc/patroni/client.crt.