Gå till innehållet

Kontrollera certifikaten för PostgreSQL-clustret

Under installationen, vid en förnyelse eller helt enkelt för att ta reda på när certifikaten för PostgreSQL-clustret går ut kan det vara användbart att granska innehållet i de genererade certifikaten.

Följande certifikat används av PostgreSQL-clustret:

 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 för rotcertifikatutfärdaren. Samma certifikat finns i katalogerna /etc/patroni/ och /etc/etcd/.

client.crt

Certifikat för PostgreSQL-noden. Samma certifikat finns i katalogerna /etc/patroni/ och /etc/etcd/. Det används av patroni och etcd för klientkommunikationen mellan noderna.

client.key

Nyckel som hör till certifikatet client.crt.

peer.crt

Samma certifikat som client.crt. Det används för den interna kommunikationen i etcd mellan noderna.

peer.key

Samma nyckel som client.key.

Det finns alltså totalt tre element:

  • rotcertifikatutfärdarens certifikat (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • PostgreSQL-nodens certifikat (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • nyckeln som hör till PostgreSQL-nodens certifikat (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

Kontrollera ett certifikats utgångsdatum

Använd kommandot nedan för att kontrollera ett certifikats utgångsdatum.

Du kan anpassa variabeln i följande kommando:

Anpassat värde Variabel Kommentar
EXPIRY_CERT Sökväg till certifikatet vars utgångsdatum ska kontrolleras.

Eller fyll fältet med ett av clustrets certifikat:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Om utgångsdatumet har passerats betraktas certifikatet som ogiltigt.

Varning

Om den certifikatutfärdare som utfärdade certifikatet har gått ut betraktas certifikatet också som ogiltigt. Kontrollera därför även certifikatutfärdarens utgångsdatum.

Exempel

För att kontrollera utgångsdatumet för certifikatet /etc/patroni/client.crt använder vi följande kommando:

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

Resultatet liknar följande:

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

Här går certifikatet ut den 18 december 2030 kl. 14:04:09.

Kontrollera ett certifikats alternativa namn (SAN)

Använd kommandot nedan för att kontrollera ett certifikats SAN (Subject Alternative Names), det vill säga de namn och IP-adresser som det är giltigt för.

Du kan anpassa variabeln i följande kommando:

Anpassat värde Variabel Kommentar
SAN_CERT Sökväg till certifikatet vars SAN ska kontrolleras.

Eller fyll fältet med ett av nodens certifikat:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Om det DNS-namn eller den IP-adress som används för att ansluta till en nod inte finns bland SAN i nodens certifikat betraktas anslutningen som ogiltig. På samma sätt gäller att när en nod öppnar en anslutning till en annan nod och det certifikat som den visar upp inte motsvarar dess eget DNS-namn eller dess egen IP-adress, avvisar fjärrnoden anslutningen.

Exempel

För att kontrollera SAN för certifikatet /etc/etcd/peer.crt använder vi följande kommando:

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

Kommandot returnerar ett resultat som liknar följande:

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

Här täcker certifikatet DNS-namnen PSQL_VIP och PSQL_2 samt IP-adresserna 192.168.1.4 och 192.168.1.2.

Kontrollera vilken certifikatutfärdare som utfärdade ett certifikat

När ett certifikat genereras kan X509v3-tillägget Authority Key Identifier läggas till i det. Detta tillägg kan lagra hashvärdet av utfärdarens publika nyckel, vilket motsvarar innehållet i utfärdarens X509v3-tillägg Subject Key Identifier.

Info

Certifikat som har genererats enligt installationsdokumentationen för PostgreSQL-clustret har tilläggen Authority Key Identifier och Subject Key Identifier.

Om dessa tillägg finns kan du hämta hashvärdet av den publika nyckeln för ett certifikats utfärdare och sedan jämföra det med hashvärdet i tillägget Subject Key Identifier för den CA som antas ha utfärdat certifikatet, för att bekräfta att det är rätt CA.

Använd kommandot nedan för att hämta värdet av tillägget Authority Key Identifier för ett certifikat.

Du kan anpassa variabeln i följande kommando:

Anpassat värde Variabel Kommentar
ISSUED_CERT Sökväg till certifikatet vars utfärdare ska kontrolleras.

Eller fyll fältet med ett av nodens certifikat:

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

Info

Alternativet -issuer hämtar CN för det utfärdande certifikatet.

Använd kommandot nedan för att hämta värdet av tillägget Subject Key Identifier för ett certifikat.

Du kan anpassa variabeln i följande kommando:

Anpassat värde Variabel Kommentar
ISSUER_CA Sökväg till certifikatet för den certifikatutfärdare som antas vara utfärdaren.

Eller fyll fältet med ett av certifikatutfärdarens certifikat:

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

Info

Alternativet -subject hämtar certifikatets CN.

Exempel

Vi vill kontrollera att den CA som signerade certifikatet i filen /etc/patroni/client.crt verkligen är den som finns i filen /etc/patroni/ca.crt.
Först hämtar vi innehållet i X509v3-tillägget Authority Key Identifier för certifikatet /etc/patroni/client.crt med följande kommando:

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

Vilket returnerar:

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

Sedan hämtar vi innehållet i X509v3-tillägget Subject Key Identifier för certifikatutfärdaren /etc/patroni/ca.crt med följande kommando:

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

Vilket returnerar:

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 jämförelse av de två resultaten visar att Key Identifier och CN är identiska: certifikatet i filen /etc/patroni/ca.crt är verkligen den CA som signerade certifikatet i filen /etc/patroni/client.crt.