Přeskočit obsah

Kontrola certifikátů clusteru PostgreSQL

Během instalace, během obnovy nebo jednoduše pro zjištění, kdy vyprší platnost certifikátů clusteru PostgreSQL, může být užitečné prozkoumat obsah vygenerovaných certifikátů.

Cluster PostgreSQL používá následující certifikáty:

 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

Certifikát kořenové certifikační autority. Stejný certifikát se nachází v adresářích /etc/patroni/ a /etc/etcd/.

client.crt

Certifikát uzlu PostgreSQL. Stejný certifikát se nachází v adresářích /etc/patroni/ a /etc/etcd/. Používají ho patroni a etcd pro klientskou komunikaci mezi uzly.

client.key

Klíč přidružený k certifikátu client.crt.

peer.crt

Stejný certifikát jako client.crt. Používá se pro interní komunikaci etcd mezi uzly.

peer.key

Stejný klíč jako client.key.

Celkem jsou tedy tři položky:

  • certifikát kořenové certifikační autority (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • certifikát uzlu PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • klíč přidružený k certifikátu uzlu PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Kontrola data vypršení platnosti certifikátu

Chcete-li zkontrolovat datum vypršení platnosti certifikátu, použijte níže uvedený příkaz.

Proměnnou pro následující příkaz můžete přizpůsobit:

Vlastní hodnota Proměnná Komentář
EXPIRY_CERT Cesta k certifikátu, jehož datum vypršení platnosti chcete zkontrolovat.

Nebo vyplňte pole jedním z certifikátů clusteru:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Pokud datum vypršení platnosti uplynulo, certifikát se považuje za neplatný.

Upozornění

Pokud vypršela platnost certifikační autority, která certifikát vydala, považuje se certifikát rovněž za neplatný. Zkontrolujte proto také datum vypršení platnosti certifikační autority.

Příklad

Ke kontrole data vypršení platnosti certifikátu /etc/patroni/client.crt použijeme následující příkaz:

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

Výstup je podobný tomuto:

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

Zde platnost certifikátu vyprší 18. prosince 2030 ve 14:04:09.

Kontrola alternativních názvů subjektu (SAN) certifikátu

Chcete-li zkontrolovat názvy SAN (Subject Alternative Names) certifikátu, tj. názvy a IP adresy, pro které je platný, použijte níže uvedený příkaz.

Proměnnou pro následující příkaz můžete přizpůsobit:

Vlastní hodnota Proměnná Komentář
SAN_CERT Cesta k certifikátu, jehož názvy SAN chcete zkontrolovat.

Nebo vyplňte pole jedním z certifikátů uzlu:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Pokud název DNS nebo IP adresa použité k připojení k uzlu nejsou uvedeny v SAN jeho certifikátu, považuje se připojení za neplatné. Stejně tak když uzel otevírá připojení k jinému uzlu a certifikát, který předkládá, neodpovídá jeho vlastnímu názvu DNS nebo IP adrese, vzdálený uzel připojení odmítne.

Příklad

Ke kontrole názvů SAN certifikátu /etc/etcd/peer.crt použijeme následující příkaz:

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

Příkaz vrátí výsledek podobný tomuto:

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

Zde certifikát pokrývá názvy DNS PSQL_VIP a PSQL_2 a také IP adresy 192.168.1.4 a 192.168.1.2.

Kontrola, která certifikační autorita certifikát vydala

Při generování certifikátu do něj lze přidat rozšíření X509v3 Authority Key Identifier. Toto rozšíření může uchovávat hodnotu hash veřejného klíče vystavitele, která odpovídá obsahu rozšíření X509v3 Subject Key Identifier vystavitele.

Informace

Certifikáty vygenerované podle dokumentace k instalaci clusteru PostgreSQL obsahují rozšíření Authority Key Identifier a Subject Key Identifier.

Pokud jsou tato rozšíření přítomna, můžete získat hodnotu hash veřejného klíče vystavitele certifikátu a porovnat ji s hodnotou hash v rozšíření Subject Key Identifier certifikační autority, která měla certifikát vydat, a potvrdit tak, že jde o tu správnou.

Chcete-li získat hodnotu rozšíření Authority Key Identifier certifikátu, použijte níže uvedený příkaz.

Proměnnou pro následující příkaz můžete přizpůsobit:

Vlastní hodnota Proměnná Komentář
ISSUED_CERT Cesta k certifikátu, jehož vystavitele chcete zkontrolovat.

Nebo vyplňte pole jedním z certifikátů uzlu:

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

Informace

Možnost -issuer získá CN vydávajícího certifikátu.

Chcete-li získat hodnotu rozšíření Subject Key Identifier certifikátu, použijte níže uvedený příkaz.

Proměnnou pro následující příkaz můžete přizpůsobit:

Vlastní hodnota Proměnná Komentář
ISSUER_CA Cesta k certifikátu certifikační autority, která je považována za vystavitele.

Nebo vyplňte pole jedním z certifikátů certifikační autority:

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

Informace

Možnost -subject získá CN certifikátu.

Příklad

Chceme ověřit, že CA, která podepsala certifikát v souboru /etc/patroni/client.crt, je skutečně ta ze souboru /etc/patroni/ca.crt.
Nejprve získáme obsah rozšíření X509v3 Authority Key Identifier certifikátu /etc/patroni/client.crt pomocí následujícího příkazu:

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

Příkaz vrátí:

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

Poté získáme obsah rozšíření X509v3 Subject Key Identifier certifikační autority /etc/patroni/ca.crt pomocí následujícího příkazu:

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

Příkaz vrátí:

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

Porovnání obou výstupů ukazuje, že Key Identifier i CN jsou totožné: certifikát v souboru /etc/patroni/ca.crt je skutečně CA, která podepsala certifikát v souboru /etc/patroni/client.crt.