Przejdź do treści

Sprawdzanie certyfikatów clustera PostgreSQL

Podczas instalacji, podczas odnawiania lub po prostu po to, aby sprawdzić, kiedy wygasają certyfikaty clustera PostgreSQL, przydatne może być zbadanie zawartości wygenerowanych certyfikatów.

Cluster PostgreSQL używa następujących certyfikatów:

 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

Certyfikat głównego urzędu certyfikacji. Ten sam certyfikat znajduje się w katalogach /etc/patroni/ i /etc/etcd/.

client.crt

Certyfikat węzła PostgreSQL. Ten sam certyfikat znajduje się w katalogach /etc/patroni/ i /etc/etcd/. Jest używany przez patroni i etcd do komunikacji klienckiej między węzłami.

client.key

Klucz powiązany z certyfikatem client.crt.

peer.crt

Ten sam certyfikat co client.crt. Jest używany do wewnętrznej komunikacji etcd między węzłami.

peer.key

Ten sam klucz co client.key.

Łącznie są więc trzy elementy:

  • certyfikat głównego urzędu certyfikacji (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • certyfikat węzła PostgreSQL (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • klucz powiązany z certyfikatem węzła PostgreSQL (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Sprawdzanie daty wygaśnięcia certyfikatu

Aby sprawdzić datę wygaśnięcia certyfikatu, użyj poniższego polecenia.

Możesz dostosować zmienną poniższego polecenia:

Wartość dostosowana Zmienna Komentarz
EXPIRY_CERT Ścieżka certyfikatu, którego datę wygaśnięcia chcesz sprawdzić.

Albo wypełnij pole jednym z certyfikatów clustera:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Jeśli data wygaśnięcia minęła, certyfikat jest uznawany za nieważny.

Ostrzeżenie

Jeśli urząd certyfikacji, który wydał certyfikat, wygasł, certyfikat również jest uznawany za nieważny. Sprawdź więc także datę wygaśnięcia urzędu certyfikacji.

Przykład

Aby sprawdzić datę wygaśnięcia certyfikatu /etc/patroni/client.crt, używamy następującego polecenia:

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

Wynik jest podobny do poniższego:

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

W tym przypadku certyfikat wygasa 18 grudnia 2030 r. o godzinie 14:04:09.

Sprawdzanie nazw alternatywnych (SAN) certyfikatu

Aby sprawdzić SAN (Subject Alternative Names) certyfikatu, czyli nazwy i adresy IP, dla których jest on ważny, użyj poniższego polecenia.

Możesz dostosować zmienną poniższego polecenia:

Wartość dostosowana Zmienna Komentarz
SAN_CERT Ścieżka certyfikatu, którego SAN chcesz sprawdzić.

Albo wypełnij pole jednym z certyfikatów węzła:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Jeśli nazwa DNS lub adres IP użyte do połączenia z węzłem nie znajdują się w SAN jego certyfikatu, połączenie jest uznawane za nieważne. Podobnie, gdy węzeł otwiera połączenie z innym węzłem, a przedstawiony przez niego certyfikat nie odpowiada jego własnej nazwie DNS lub adresowi IP, węzeł zdalny odrzuca połączenie.

Przykład

Aby sprawdzić SAN certyfikatu /etc/etcd/peer.crt, używamy następującego polecenia:

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

Polecenie zwraca wynik podobny do poniższego:

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

W tym przypadku certyfikat obejmuje nazwy DNS PSQL_VIP i PSQL_2, a także adresy IP 192.168.1.4 i 192.168.1.2.

Sprawdzanie, który urząd certyfikacji wydał certyfikat

Podczas generowania certyfikatu można dodać do niego rozszerzenie X509v3 Authority Key Identifier. To rozszerzenie może przechowywać skrót klucza publicznego wystawcy, który odpowiada zawartości rozszerzenia X509v3 Subject Key Identifier wystawcy.

Info

Certyfikaty wygenerowane zgodnie z dokumentacją instalacji clustera PostgreSQL mają rozszerzenia Authority Key Identifier i Subject Key Identifier.

Jeśli te rozszerzenia są obecne, możesz pobrać skrót klucza publicznego wystawcy certyfikatu, a następnie porównać go ze skrótem zawartym w rozszerzeniu Subject Key Identifier urzędu CA, który miał wydać certyfikat, aby potwierdzić, że chodzi o właściwy urząd.

Aby pobrać wartość rozszerzenia Authority Key Identifier certyfikatu, użyj poniższego polecenia.

Możesz dostosować zmienną poniższego polecenia:

Wartość dostosowana Zmienna Komentarz
ISSUED_CERT Ścieżka certyfikatu, którego wystawcę chcesz sprawdzić.

Albo wypełnij pole jednym z certyfikatów węzła:

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

Info

Opcja -issuer pozwala pobrać CN certyfikatu wystawcy.

Aby pobrać wartość rozszerzenia Subject Key Identifier certyfikatu, użyj poniższego polecenia.

Możesz dostosować zmienną poniższego polecenia:

Wartość dostosowana Zmienna Komentarz
ISSUER_CA Ścieżka certyfikatu urzędu certyfikacji, który uznaje się za wystawcę.

Albo wypełnij pole jednym z certyfikatów urzędu certyfikacji:

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

Info

Opcja -subject pozwala pobrać CN certyfikatu.

Przykład

Chcemy sprawdzić, czy urząd CA, który podpisał certyfikat zawarty w pliku /etc/patroni/client.crt, jest rzeczywiście tym zawartym w pliku /etc/patroni/ca.crt.
Najpierw pobieramy zawartość rozszerzenia X509v3 Authority Key Identifier certyfikatu /etc/patroni/client.crt za pomocą następującego polecenia:

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

Polecenie zwraca:

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

Następnie pobieramy zawartość rozszerzenia X509v3 Subject Key Identifier urzędu CA /etc/patroni/ca.crt za pomocą następującego polecenia:

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

Polecenie zwraca:

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

Porównanie obu wyników pokazuje, że Key Identifier i CN są identyczne: certyfikat zawarty w pliku /etc/patroni/ca.crt jest rzeczywiście urzędem CA, który podpisał certyfikat zawarty w pliku /etc/patroni/client.crt.