Zum Inhalt

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
/etc/etcd/
├── ca.crt
├── client.crt
├── client.key
├── peer.crt
└── peer.key

/etc/patroni/
├── ca.crt
├── client.crt
└── client.key
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 von patroni und etcd für die Client-Kommunikation zwischen den Knoten verwendet.

client.key

Schlüssel, der dem Zertifikat client.crt zugeordnet ist.

peer.crt

Dasselbe Zertifikat wie client.crt. Es wird für die interne Kommunikation von etcd zwischen 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
openssl x509 -in EXPIRY_CERT -noout -enddate

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
openssl x509 -in /etc/patroni/client.crt -noout -enddate

Die Ausgabe sieht ungefähr so aus:

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

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
openssl x509 -in SAN_CERT -noout -ext subjectAltName

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
openssl x509 -in /etc/etcd/peer.crt -noout -ext subjectAltName

Der Befehl gibt ein Ergebnis ähnlich dem folgenden zurück:

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 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
openssl x509 -in ISSUED_CERT -noout -issuer -ext authorityKeyIdentifier

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
openssl x509 -in ISSUER_CA -noout -subject -ext subjectKeyIdentifier

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
openssl x509 -in /etc/patroni/client.crt -noout -issuer -ext authorityKeyIdentifier

Die Ausgabe lautet:

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

Anschließend rufen wir den Inhalt der X509v3-Erweiterung Subject Key Identifier der CA /etc/patroni/ca.crt mit dem folgenden Befehl ab:

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

Die Ausgabe lautet:

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

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.