Datenbank Sicherheit · 2 min read · Dec 15, 2025
SSL-Zertifikate für PostgreSQL
SSL-Zertifikate für PostgreSQL
Dies beschreibt, wie man SSL-Zertifikate einrichtet, um verschlüsselte Verbindungen von PgAdmin auf einem Client-Computer zu PostgreSQL auf einem Server-Computer zu ermöglichen. Die Annahme ist, dass PostgreSQL (mit SSL-Unterstützung kompiliert) und OpenSSL bereits auf dem Server (Linux) installiert und funktionsfähig sind. PgAdmin ist bereits auf dem Client (entweder Windows oder Linux) installiert.
Auf dem Server sind drei Zertifikate im Datenverzeichnis erforderlich. Der Standard von CentOS ist /var/lib/pgsql/data/:
root.crt (vertrautes Root-Zertifikat)
server.crt (Serverzertifikat)
server.key (privater Schlüssel)
Führen Sie die Befehle als Root aus.
sudo -cd /var/lib/pgsql/dataGenerieren Sie einen privaten Schlüssel (Sie müssen eine Passphrase angeben).
openssl genrsa -des3 -out server.key 1024Entfernen Sie die Passphrase.
openssl rsa -in server.key -out server.keySetzen Sie die entsprechenden Berechtigungen und den Eigentümer für die Datei des privaten Schlüssels.
chmod 400 server.key
chown postgres.postgres server.keyErstellen Sie das Serverzertifikat.
-subj ist eine Abkürzung, um die Eingabe von Informationen zu vermeiden.
-x509 erzeugt ein selbstsigniertes Zertifikat anstelle einer Zertifikatsanforderung.
openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=thebrain.ca/[email protected]'Da wir selbstsignieren, verwenden wir das Serverzertifikat als vertrauenswürdiges Root-Zertifikat.
cp server.crt root.crtSie müssen die pg_hba.conf bearbeiten. Zum Beispiel:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" ist nur für Unix-Domain-Socket-Verbindungen
local all all trust
# IPv4 lokale Verbindungen:
host all all 127.0.0.1/32 trust
# IPv4 Remote-Verbindungen für authentifizierte Benutzer
hostssl all www-data 0.0.0.0/0 md5 clientcert=1
hostssl all postgres 0.0.0.0/0 md5 clientcert=1Sie müssen die postgresql.conf bearbeiten, um SSL tatsächlich zu aktivieren:
ssl = onDer PostgreSQL-Server muss neu gestartet werden.
/etc/init.d/postgresql restartWenn der Server nicht (neu) startet, schauen Sie im PostgreSQL-Startprotokoll, /var/lib/pgsql/pgstartup.log, dem Standard für CentOS, nach dem Grund.
Auf dem Client benötigen wir drei Dateien. Für Windows müssen sich diese Dateien im Verzeichnis %appdata%\postgresql\ befinden. Für Linux im Verzeichnis ~/.postgresql/.
root.crt (vertrautes Root-Zertifikat)
postgresql.crt (Client-Zertifikat)
postgresql.key (privater Schlüssel)
Generieren Sie die benötigten Dateien auf der Servermaschine und kopieren Sie sie dann zum Client. Wir werden die benötigten Dateien im Verzeichnis /tmp/ generieren.
Zuerst erstellen Sie den privaten Schlüssel postgresql.key für die Clientmaschine und entfernen die Passphrase.
openssl genrsa -des3 -out /tmp/postgresql.key 1024openssl rsa -in /tmp/postgresql.key -out /tmp/postgresql.keyDann erstellen Sie das Zertifikat postgresql.crt. Es muss von unserem vertrauenswürdigen Root signiert werden (das den privaten Schlüssel auf der Servermaschine verwendet). Außerdem muss der gemeinsame Name (CN) des Zertifikats auf den Datenbankbenutzernamen gesetzt werden, mit dem wir uns verbinden werden.
openssl req -new -key /tmp/postgresql.key -out /tmp/postgresql.csr -subj '/C=CA/ST=British Columbia/L=Comox/O=TheBrain.ca/CN=www-data'openssl x509 -req -in /tmp/postgresql.csr -CA root.crt -CAkey server.key -out /tmp/postgresql.crt -CAcreateserialKopieren Sie die drei Dateien, die wir im Verzeichnis /tmp/ auf dem Server erstellt haben, auf die Clientmaschine.
Kopieren Sie das vertrauenswürdige Root-Zertifikat root.crt von der Servermaschine auf die Clientmaschine (für Windows pgadmin %appdata%\postgresql\ oder für Linux pgadmin ~/.postgresql/). Ändern Sie die Dateiberechtigungen von postgresql.key, um den Zugriff nur auf Sie zu beschränken (wahrscheinlich nicht nötig auf Windows, da der eingeschränkte Zugriff bereits vererbt wird). Entfernen Sie die Dateien aus dem Verzeichnis /tmp/ auf dem Server.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.