Die Zertifikate des PostgreSQL-Clusters überprüfen¶
Während der Installation, bei einer Erneuerung oder einfach, um herauszufinden, wann die Zertifikate des PostgreSQL-Clusters ablaufen, kann es nützlich sein, den Inhalt der generierten Zertifikate zu untersuchen.
Der PostgreSQL-Cluster verwendet die folgenden Zertifikate:
1 2 3 4 5 6 7 8 9 10 11 | |
ca.crt-
Zertifikat der Stammzertifizierungsstelle. Dasselbe Zertifikat befindet sich in den Verzeichnissen
/etc/patroni/und/etc/etcd/. client.crt-
Zertifikat des PostgreSQL-Knotens. Dasselbe Zertifikat befindet sich in den Verzeichnissen
/etc/patroni/und/etc/etcd/. Es wird vonpatroniundetcdfür die Client-Kommunikation zwischen den Knoten verwendet. client.key-
Schlüssel, der dem Zertifikat
client.crtzugeordnet ist. peer.crt-
Dasselbe Zertifikat wie
client.crt. Es wird für die interne Kommunikation vonetcdzwischen den Knoten verwendet. peer.key-
Derselbe Schlüssel wie
client.key.
Insgesamt gibt es also drei Elemente:
- das Zertifikat der Stammzertifizierungsstelle (
/etc/etcd/ca.crt,/etc/patroni/ca.crt); - das Zertifikat des PostgreSQL-Knotens (
/etc/etcd/client.crt,/etc/etcd/peer.crt,/etc/patroni/client.crt); - der Schlüssel, der dem Zertifikat des PostgreSQL-Knotens zugeordnet ist (
/etc/etcd/client.key,/etc/etcd/peer.key,/etc/patroni/client.key).
Das Ablaufdatum eines Zertifikats überprüfen¶
Verwenden Sie den folgenden Befehl, um das Ablaufdatum eines Zertifikats zu überprüfen.
Sie können die Variable für den folgenden Befehl anpassen:
| Angepasster Wert | Variable | Kommentar |
|---|---|---|
EXPIRY_CERT |
Pfad des Zertifikats, dessen Ablaufdatum überprüft werden soll. |
Oder füllen Sie das Feld mit einem der Cluster-Zertifikate:
1 | |
Wenn das Ablaufdatum überschritten ist, gilt das Zertifikat als ungültig.
Achtung
Wenn die Zertifizierungsstelle, die das Zertifikat ausgestellt hat, abgelaufen ist, gilt das Zertifikat ebenfalls als ungültig. Überprüfen Sie daher auch das Ablaufdatum der Zertifizierungsstelle.
Beispiel
Um das Ablaufdatum des Zertifikats /etc/patroni/client.crt zu überprüfen, verwenden wir den folgenden Befehl:
1 | |
Die Ausgabe sieht ungefähr so aus:
1 | |
Hier läuft das Zertifikat am 18. Dezember 2030 um 14:04:09 ab.
Die Subject Alternative Names eines Zertifikats überprüfen¶
Verwenden Sie den folgenden Befehl, um die SANs (Subject Alternative Names) eines Zertifikats zu überprüfen, also die Namen und IP-Adressen, für die es gültig ist.
Sie können die Variable für den folgenden Befehl anpassen:
| Angepasster Wert | Variable | Kommentar |
|---|---|---|
SAN_CERT |
Pfad des Zertifikats, dessen SANs überprüft werden sollen. |
Oder füllen Sie das Feld mit einem der Knotenzertifikate:
1 | |
Wenn der DNS-Name oder die IP-Adresse, über die eine Verbindung zu einem Knoten hergestellt wird, nicht in den SANs seines Zertifikats enthalten ist, gilt die Verbindung als ungültig. Ebenso lehnt der entfernte Knoten die Verbindung ab, wenn ein Knoten eine Verbindung zu einem anderen Knoten aufbaut und das von ihm vorgelegte Zertifikat nicht mit seinem eigenen DNS-Namen oder seiner eigenen IP-Adresse übereinstimmt.
Beispiel
Um die SANs des Zertifikats /etc/etcd/peer.crt zu überprüfen, verwenden wir den folgenden Befehl:
1 | |
Der Befehl gibt ein Ergebnis ähnlich dem folgenden zurück:
1 2 | |
Hier deckt das Zertifikat die DNS-Namen PSQL_VIP und PSQL_2 sowie die IP-Adressen 192.168.1.4 und 192.168.1.2 ab.
Die ausstellende Zertifizierungsstelle eines Zertifikats überprüfen¶
Beim Generieren eines Zertifikats kann ihm die X509v3-Erweiterung Authority Key Identifier hinzugefügt werden. Diese Erweiterung kann den Hash des öffentlichen Schlüssels seines Ausstellers speichern, der dem Inhalt der X509v3-Erweiterung Subject Key Identifier des Ausstellers entspricht.
Info
Zertifikate, die gemäß der Installationsdokumentation des PostgreSQL-Clusters generiert wurden, verfügen über die Erweiterungen Authority Key Identifier und Subject Key Identifier.
Wenn diese Erweiterungen vorhanden sind, können Sie den Hash des öffentlichen Schlüssels des Ausstellers eines Zertifikats abrufen und ihn anschließend mit dem Hash in der Erweiterung Subject Key Identifier der CA vergleichen, die das Zertifikat ausgestellt haben soll, um zu bestätigen, dass es die richtige ist.
Verwenden Sie den folgenden Befehl, um den Wert der Erweiterung Authority Key Identifier eines Zertifikats abzurufen.
Sie können die Variable für den folgenden Befehl anpassen:
| Angepasster Wert | Variable | Kommentar |
|---|---|---|
ISSUED_CERT |
Pfad des Zertifikats, dessen Aussteller überprüft werden soll. |
Oder füllen Sie das Feld mit einem der Knotenzertifikate:
1 | |
Info
Die Option -issuer ruft den CN des ausstellenden Zertifikats ab.
Verwenden Sie den folgenden Befehl, um den Wert der Erweiterung Subject Key Identifier eines Zertifikats abzurufen.
Sie können die Variable für den folgenden Befehl anpassen:
| Angepasster Wert | Variable | Kommentar |
|---|---|---|
ISSUER_CA |
Pfad des Zertifikats der Zertifizierungsstelle, die vermutlich der Aussteller ist. |
Oder füllen Sie das Feld mit einem der Zertifikate der Zertifizierungsstelle:
1 | |
Info
Die Option -subject ruft den CN des Zertifikats ab.
Beispiel
Wir möchten überprüfen, ob die CA, die das Zertifikat in der Datei /etc/patroni/client.crt signiert hat, tatsächlich die in der Datei /etc/patroni/ca.crt ist.
Zunächst rufen wir den Inhalt der X509v3-Erweiterung Authority Key Identifier des Zertifikats /etc/patroni/client.crt mit dem folgenden Befehl ab:
1 | |
Die Ausgabe lautet:
1 2 3 | |
Anschließend rufen wir den Inhalt der X509v3-Erweiterung Subject Key Identifier der CA /etc/patroni/ca.crt mit dem folgenden Befehl ab:
1 | |
Die Ausgabe lautet:
1 2 3 | |
Der Vergleich der beiden Ausgaben zeigt, dass Key Identifier und CN identisch sind: Das Zertifikat in der Datei /etc/patroni/ca.crt ist tatsächlich die CA, die das Zertifikat in der Datei /etc/patroni/client.crt signiert hat.