Gå til innhold

Kontrollere sertifikatene til PostgreSQL-clusteren

Under installasjonen, under en fornyelse eller bare for å finne ut når sertifikatene til PostgreSQL-clusteren utløper, kan det være nyttig å undersøke innholdet i de genererte sertifikatene.

Sertifikatene som brukes av PostgreSQL-clusteren, er følgende:

 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

Sertifikatet til rotsertifiseringsinstansen. Det samme sertifikatet finnes i katalogene /etc/patroni/ og /etc/etcd/.

client.crt

Sertifikatet til PostgreSQL-noden. Det samme sertifikatet finnes i katalogene /etc/patroni/ og /etc/etcd/. Det brukes av patroni og etcd til klientkommunikasjon mellom nodene.

client.key

Nøkkel knyttet til sertifikatet client.crt.

peer.crt

Samme sertifikat som client.crt. Det brukes til den interne etcd-kommunikasjonen mellom nodene.

peer.key

Samme nøkkel som client.key.

Det er altså tre elementer i alt:

  • sertifikatet til rotsertifiseringsinstansen (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • sertifikatet til PostgreSQL-noden (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • nøkkelen knyttet til sertifikatet til PostgreSQL-noden (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Kontrollere utløpsdatoen for et sertifikat

Bruk kommandoen nedenfor for å kontrollere utløpsdatoen for et sertifikat.

Du kan tilpasse variabelen for følgende kommando:

Tilpasset verdi Variabel Kommentar
EXPIRY_CERT Banen til sertifikatet du vil kontrollere utløpsdatoen for.

Eller fyll ut feltet med ett av sertifikatene til clusteren:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Hvis utløpsdatoen er passert, anses sertifikatet som ugyldig.

Adadvarsel

Hvis sertifiseringsinstansen som utstedte sertifikatet, er utløpt, anses sertifikatet også som ugyldig. Kontroller derfor også utløpsdatoen for sertifiseringsinstansen.

Eksempel

For å kontrollere utløpsdatoen for sertifikatet /etc/patroni/client.crt bruker vi følgende kommando:

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

Utdataene ligner på dette:

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

Her utløper sertifikatet 18. desember 2030 kl. 14:04:09.

Kontrollere Subject Alternative Names for et sertifikat

Bruk kommandoen nedenfor for å kontrollere SAN-ene (Subject Alternative Names) for et sertifikat, det vil si navnene og IP-adressene det er gyldig for.

Du kan tilpasse variabelen for følgende kommando:

Tilpasset verdi Variabel Kommentar
SAN_CERT Banen til sertifikatet du vil kontrollere SAN-ene for.

Eller fyll ut feltet med ett av sertifikatene til noden:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Hvis DNS-navnet eller IP-adressen som brukes for å koble til en node, ikke finnes blant SAN-ene i sertifikatet til noden, anses tilkoblingen som ugyldig. Tilsvarende avviser den eksterne noden tilkoblingen når en node åpner en tilkobling til en annen node og sertifikatet den presenterer, ikke samsvarer med nodens eget DNS-navn eller IP-adresse.

Eksempel

For å kontrollere SAN-ene i sertifikatet /etc/etcd/peer.crt bruker vi følgende kommando:

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

Kommandoen returnerer et resultat som ligner på 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 dekker sertifikatet DNS-navnene PSQL_VIP og PSQL_2, samt IP-adressene 192.168.1.4 og 192.168.1.2.

Kontrollere hvilken sertifiseringsinstans som utstedte et sertifikat

Når et sertifikat genereres, kan X509v3-utvidelsen Authority Key Identifier legges til i det. Denne utvidelsen kan lagre hashverdien av utstederens offentlige nøkkel, som samsvarer med innholdet i utstederens X509v3-utvidelse Subject Key Identifier.

Info

Sertifikater som er generert ved å følge dokumentasjonen for installasjon av PostgreSQL-clusteren, har utvidelsene Authority Key Identifier og Subject Key Identifier.

Hvis disse utvidelsene finnes, kan du hente hashverdien av den offentlige nøkkelen til utstederen av et sertifikat, og deretter sammenligne den med hashverdien i utvidelsen Subject Key Identifier for den CA som skal ha utstedt sertifikatet, for å bekrefte at det er riktig CA.

Bruk kommandoen nedenfor for å hente verdien av utvidelsen Authority Key Identifier for et sertifikat.

Du kan tilpasse variabelen for følgende kommando:

Tilpasset verdi Variabel Kommentar
ISSUED_CERT Banen til sertifikatet du vil kontrollere utstederen for.

Eller fyll ut feltet med ett av sertifikatene til noden:

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

Info

Alternativet -issuer henter CN for det utstedende sertifikatet.

Bruk kommandoen nedenfor for å hente verdien av utvidelsen Subject Key Identifier for et sertifikat.

Du kan tilpasse variabelen for følgende kommando:

Tilpasset verdi Variabel Kommentar
ISSUER_CA Banen til sertifikatet til sertifiseringsinstansen som antas å være utstederen.

Eller fyll ut feltet med ett av sertifikatene til sertifiseringsinstansen:

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

Info

Alternativet -subject henter CN for sertifikatet.

Eksempel

Vi vil kontrollere at den CA som signerte sertifikatet i filen /etc/patroni/client.crt, faktisk er den som ligger i filen /etc/patroni/ca.crt.
Først henter vi innholdet i X509v3-utvidelsen Authority Key Identifier for sertifikatet /etc/patroni/client.crt med følgende kommando:

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

Dette 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

Deretter henter vi innholdet i X509v3-utvidelsen Subject Key Identifier for CA-sertifikatet /etc/patroni/ca.crt med følgende kommando:

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

Dette 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

Ved å sammenligne de to utdataene ser vi at Key Identifier og CN er identiske: sertifikatet i filen /etc/patroni/ca.crt er faktisk den CA som signerte sertifikatet i filen /etc/patroni/client.crt.