Gå til indholdet

Kontrol af certifikaterne for PostgreSQL-clusteret

Under installationen, under en fornyelse eller blot for at finde ud af, hvornår certifikaterne for PostgreSQL-clusteret udløber, kan det være nyttigt at undersøge indholdet af de genererede certifikater.

PostgreSQL-clusteret bruger følgende certifikater:

 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 for rodcertificeringsmyndigheden. Det samme certifikat findes i mapperne /etc/patroni/ og /etc/etcd/.

client.crt

Certifikat for PostgreSQL-noden. Det samme certifikat findes i mapperne /etc/patroni/ og /etc/etcd/. Det bruges af patroni og etcd til klientkommunikationen mellem noderne.

client.key

Nøgle, der er knyttet til certifikatet client.crt.

peer.crt

Samme certifikat som client.crt. Det bruges til den interne kommunikation i etcd mellem noderne.

peer.key

Samme nøgle som client.key.

Der er således i alt tre elementer:

  • certifikatet for rodcertificeringsmyndigheden (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • certifikatet for PostgreSQL-noden (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • nøglen, der er knyttet til certifikatet for PostgreSQL-noden (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Kontrol af et certifikats udløbsdato

Brug kommandoen nedenfor for at kontrollere et certifikats udløbsdato.

Du kan tilpasse variablen i følgende kommando:

Tilpasset værdi Variabel Kommentar
EXPIRY_CERT Sti til det certifikat, hvis udløbsdato skal kontrolleres.

Eller udfyld feltet med et af clusterets certifikater:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Hvis udløbsdatoen er overskredet, betragtes certifikatet som ugyldigt.

Advarsel

Hvis den certificeringsmyndighed, der har udstedt certifikatet, er udløbet, betragtes certifikatet også som ugyldigt. Kontrollér derfor også certificeringsmyndighedens udløbsdato.

Eksempel

For at kontrollere udløbsdatoen for certifikatet /etc/patroni/client.crt bruger vi følgende kommando:

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

Resultatet ligner dette:

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

Her udløber certifikatet den 18. december 2030 kl. 14:04:09.

Kontrol af et certifikats Subject Alternative Names

Brug kommandoen nedenfor for at kontrollere et certifikats SAN'er (Subject Alternative Names), dvs. de navne og IP-adresser, som det er gyldigt for.

Du kan tilpasse variablen i følgende kommando:

Tilpasset værdi Variabel Kommentar
SAN_CERT Sti til det certifikat, hvis SAN'er skal kontrolleres.

Eller udfyld feltet med et af nodens certifikater:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Hvis det DNS-navn eller den IP-adresse, der bruges til at oprette forbindelse til en node, ikke findes i SAN'erne i nodens certifikat, betragtes forbindelsen som ugyldig. Ligeledes gælder det, at når en node åbner en forbindelse til en anden node, og det certifikat, den præsenterer, ikke svarer til dens eget DNS-navn eller dens egen IP-adresse, afviser den fjerne node forbindelsen.

Eksempel

For at kontrollere SAN'erne i certifikatet /etc/etcd/peer.crt bruger vi følgende kommando:

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

Kommandoen returnerer et resultat, der ligner dette:

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

Her dækker certifikatet DNS-navnene PSQL_VIP og PSQL_2 samt IP-adresserne 192.168.1.4 og 192.168.1.2.

Kontrol af, hvilken certificeringsmyndighed der har udstedt et certifikat

Når et certifikat genereres, kan X509v3-udvidelsen Authority Key Identifier føjes til det. Denne udvidelse kan indeholde hashværdien af udstederens offentlige nøgle, som svarer til indholdet af udstederens X509v3-udvidelse Subject Key Identifier.

Info

Certifikater, der er genereret ved at følge dokumentationen til installation af PostgreSQL-clusteret, har udvidelserne Authority Key Identifier og Subject Key Identifier.

Hvis disse udvidelser er til stede, kan du hente hashværdien af den offentlige nøgle for et certifikats udsteder og derefter sammenligne den med hashværdien i udvidelsen Subject Key Identifier for den CA, der formodes at have udstedt certifikatet, for at bekræfte, at det er den rigtige.

Brug kommandoen nedenfor for at hente værdien af udvidelsen Authority Key Identifier for et certifikat.

Du kan tilpasse variablen i følgende kommando:

Tilpasset værdi Variabel Kommentar
ISSUED_CERT Sti til det certifikat, hvis udsteder skal kontrolleres.

Eller udfyld feltet med et af nodens certifikater:

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

Info

Indstillingen -issuer henter CN for det udstedende certifikat.

Brug kommandoen nedenfor for at hente værdien af udvidelsen Subject Key Identifier for et certifikat.

Du kan tilpasse variablen i følgende kommando:

Tilpasset værdi Variabel Kommentar
ISSUER_CA Sti til certifikatet for den certificeringsmyndighed, der formodes at være udsteder.

Eller udfyld feltet med et af certificeringsmyndighedens certifikater:

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

Info

Indstillingen -subject henter certifikatets CN.

Eksempel

Vi vil kontrollere, at den CA, der har signeret certifikatet i filen /etc/patroni/client.crt, faktisk er den, der findes i filen /etc/patroni/ca.crt.
Først henter vi indholdet af X509v3-udvidelsen Authority Key Identifier for certifikatet /etc/patroni/client.crt med følgende kommando:

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

Det returnerer:

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

Derefter henter vi indholdet af X509v3-udvidelsen Subject Key Identifier for CA'en /etc/patroni/ca.crt med følgende kommando:

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

Det returnerer:

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

En sammenligning af de to resultater viser, at Key Identifier og CN er identiske: certifikatet i filen /etc/patroni/ca.crt er faktisk den CA, der har signeret certifikatet i filen /etc/patroni/client.crt.