Die SLF Postgres Datenbank kann im MWN über 10.162.111.159
Port 5432
mit Passwort geöffnet werden. Zur Sicherheit ist allerdings nur eine Verbindung über SSL möglich.
Einrichtung
SSL Support auf dem Server ist nach der offiziellen Anleitung (Siehe "Basic Setup" und "Creating Certificates") eingerichtet. Dazu kommentiert man in C:\Program Files\PostgreSQL\13\data\postgresql.conf
in der VM die Zeile ssl = on
aus (Siehe Dokumentation der Konfigurationsdatei) und lädt in den gleichen Ordner die Dateien server.crt
und server.key
hoch.
Die Zertifikatsdateien sind alle im Repo und nach Anleitung (lokal auf dem Laptop) generiert:
# Root Certificate Signing Request (CSR) erstellen
openssl req -new -nodes -text -out root.csr -keyout root.key -subj "/CN=root.industry40.digillab"
chmod og-rwx root.key
# Root CSR selbst signieren
openssl x509 -req -in root.csr -text -days 3650 -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey root.key -out root.crt
# Server CSR erstellen und selbst signieren
openssl req -new -nodes -text -out server.csr -keyout server.key -subj "/CN=db.industry40.digillab"
chmod og-rwx server.key
openssl x509 -req -in server.csr -text -days 3650 -CA root.crt -CAkey root.key -CAcreateserial -out server.crt
Danach startet man Postgresql neu (in der VM: Eingebeaufforderung als Admin starten, dann services.msc<ENTER>
und bei postgres 13 ber Rechtsklick neustarten. Falls eine Fehlermeldung kommt, ist evtl etwas in der Konfiguration falsch).
Clients hinzufügen
Damit nur berechtigte Clients aus dem MWN zugreifen können, müssen die Client IPs einzeln in C:\Program Files\PostgreSQL\13\data\pg_hba.conf
eingetragen werden. Diese Zeile erlaubt zum Beispiel den tuedfed-tat40web Server mit IP 138.246.225.122
:
hostssl all all 138.246.225.122/32 md5
Verbindung mit psycopg
Mit psycopg kann man entweder ohne Verifzierung des Server Zertifikates (nur Transportverschlüsselung) sich verbinden:
conn = psycopg.connect(..., password="...", sslmode='require')
oder mit Verifizierung:
conn = psycopg.connect(..., password="...", sslmode='verify-ca', sslrootcert='root.crt')
In letzterem Fall braucht man die Datei root.crt
.
Falls der Client noch nicht in pg_hba.conf
hinzugefügt wurde (siehe oben), erhält man die IP praktischerweise in der Fehlermeldung.