Ga naar inhoud

De certificaten van de PostgreSQL-cluster controleren

Tijdens de installatie, bij een vernieuwing of gewoon om te weten wanneer de certificaten van de PostgreSQL-cluster verlopen, kan het nuttig zijn de inhoud van de gegenereerde certificaten te bekijken.

De certificaten die de PostgreSQL-cluster gebruikt, zijn de volgende:

 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

Certificaat van de root-certificeringsinstantie. Hetzelfde certificaat staat in de mappen /etc/patroni/ en /etc/etcd/.

client.crt

Certificaat van de PostgreSQL-node. Hetzelfde certificaat staat in de mappen /etc/patroni/ en /etc/etcd/. Het wordt door patroni en etcd gebruikt voor de clientcommunicatie tussen de nodes.

client.key

Sleutel die bij het certificaat client.crt hoort.

peer.crt

Hetzelfde certificaat als client.crt. Het wordt gebruikt voor de interne communicatie van etcd tussen de nodes.

peer.key

Dezelfde sleutel als client.key.

Er zijn dus in totaal drie elementen:

  • het certificaat van de root-certificeringsinstantie (/etc/etcd/ca.crt, /etc/patroni/ca.crt);
  • het certificaat van de PostgreSQL-node (/etc/etcd/client.crt, /etc/etcd/peer.crt, /etc/patroni/client.crt);
  • de sleutel die bij het certificaat van de PostgreSQL-node hoort (/etc/etcd/client.key, /etc/etcd/peer.key, /etc/patroni/client.key).

De vervaldatum van een certificaat controleren

Gebruik de onderstaande opdracht om de vervaldatum van een certificaat te controleren.

U kunt de variabele van de volgende opdracht aanpassen:

Aangepaste waarde Variabele Opmerking
EXPIRY_CERT Pad van het certificaat waarvan u de vervaldatum wilt controleren.

Of vul het veld met een van de certificaten van de cluster:

1
openssl x509 -in EXPIRY_CERT -noout -enddate

Als de vervaldatum verstreken is, wordt het certificaat als ongeldig beschouwd.

Waarschuwing

Als de certificeringsinstantie die het certificaat heeft uitgegeven, verlopen is, wordt het certificaat eveneens als ongeldig beschouwd. Controleer daarom ook de vervaldatum van de certificeringsinstantie.

Voorbeeld

Om de vervaldatum van het certificaat /etc/patroni/client.crt te controleren, gebruiken we de volgende opdracht:

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

De uitvoer ziet er ongeveer zo uit:

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

Hier verloopt het certificaat op 18 december 2030 om 14:04:09.

De Subject Alternative Names van een certificaat controleren

Gebruik de onderstaande opdracht om de SAN's (Subject Alternative Names) van een certificaat te controleren, dat wil zeggen de namen en IP-adressen waarvoor het geldig is.

U kunt de variabele van de volgende opdracht aanpassen:

Aangepaste waarde Variabele Opmerking
SAN_CERT Pad van het certificaat waarvan u de SAN's wilt controleren.

Of vul het veld met een van de certificaten van de node:

1
openssl x509 -in SAN_CERT -noout -ext subjectAltName

Als de DNS-naam of het IP-adres waarmee verbinding met een node wordt gemaakt, niet in de SAN's van zijn certificaat staat, wordt de verbinding als ongeldig beschouwd. Evenzo geldt: wanneer een node een verbinding met een andere node opent en het certificaat dat hij presenteert niet overeenkomt met zijn eigen DNS-naam of IP-adres, weigert de externe node de verbinding.

Voorbeeld

Om de SAN's van het certificaat /etc/etcd/peer.crt te controleren, gebruiken we de volgende opdracht:

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

De opdracht geeft een resultaat terug dat er ongeveer zo uitziet:

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

Hier dekt het certificaat de DNS-namen PSQL_VIP en PSQL_2, evenals de IP-adressen 192.168.1.4 en 192.168.1.2.

Controleren welke certificeringsinstantie een certificaat heeft uitgegeven

Bij het genereren van een certificaat kan de X509v3-extensie Authority Key Identifier eraan worden toegevoegd. Deze extensie kan de hash van de openbare sleutel van de uitgever opslaan, die overeenkomt met de inhoud van de X509v3-extensie Subject Key Identifier van de uitgever.

Info

Certificaten die zijn gegenereerd volgens de installatiedocumentatie van de PostgreSQL-cluster hebben de extensies Authority Key Identifier en Subject Key Identifier.

Als deze extensies aanwezig zijn, kunt u de hash van de openbare sleutel van de uitgever van een certificaat ophalen en die vergelijken met de hash in de extensie Subject Key Identifier van de CA die het certificaat verondersteld wordt te hebben uitgegeven, om te bevestigen dat het de juiste is.

Gebruik de onderstaande opdracht om de waarde van de extensie Authority Key Identifier van een certificaat op te halen.

U kunt de variabele van de volgende opdracht aanpassen:

Aangepaste waarde Variabele Opmerking
ISSUED_CERT Pad van het certificaat waarvan u de uitgever wilt controleren.

Of vul het veld met een van de certificaten van de node:

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

Info

De optie -issuer haalt de CN van het uitgevende certificaat op.

Gebruik de onderstaande opdracht om de waarde van de extensie Subject Key Identifier van een certificaat op te halen.

U kunt de variabele van de volgende opdracht aanpassen:

Aangepaste waarde Variabele Opmerking
ISSUER_CA Pad van het certificaat van de certificeringsinstantie die vermoedelijk de uitgever is.

Of vul het veld met een van de certificaten van de certificeringsinstantie:

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

Info

De optie -subject haalt de CN van het certificaat op.

Voorbeeld

We willen controleren of de CA die het certificaat in het bestand /etc/patroni/client.crt heeft ondertekend, wel degelijk die in het bestand /etc/patroni/ca.crt is.
We halen eerst de inhoud van de X509v3-extensie Authority Key Identifier van het certificaat /etc/patroni/client.crt op met de volgende opdracht:

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

Dit geeft het volgende terug:

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

Vervolgens halen we de inhoud van de X509v3-extensie Subject Key Identifier van de CA /etc/patroni/ca.crt op met de volgende opdracht:

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

Dit geeft het volgende terug:

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

Uit de vergelijking van beide uitvoeren blijkt dat de Key Identifier en de CN identiek zijn: het certificaat in het bestand /etc/patroni/ca.crt is wel degelijk de CA die het certificaat in het bestand /etc/patroni/client.crt heeft ondertekend.