SSL » Historie » Version 5
[E] Rocco Kreutz, 16.12.2025 13:13
| 1 | 1 | [E] Rocco Kreutz | {{TOC}} |
|---|---|---|---|
| 2 | |||
| 3 | h1. SSL |
||
| 4 | |||
| 5 | * Um SSL für PG-Server zu aktivieren müssen sowohl die postgresql.conf als auch die pg_hba.conf angepasst werden |
||
| 6 | * Ausserdem wird ein SSL Zertifikat benötigt |
||
| 7 | |||
| 8 | h2. SSL Zertifikat |
||
| 9 | |||
| 10 | * Im Allereinfachsten Fall reicht ein selbstsigniertes Zertifikat |
||
| 11 | ** In diesem Falle wird ist das effektive Ergebniss, dass der Traffic verschlüsselt wird zwischen Server und Client (sofern der Client SSL aushandelt) |
||
| 12 | ** MITM-Attacken werden damit nicht verhindert, da keine Verifizierung des Zertifikates selber gegen Trusted Root-CA stattfinden kann |
||
| 13 | ** In diesem Fall ist es NICHT notwendig den DN des Zertifikates korrekt zu setzen, da dieser ebenfalls nicht verifiziert wird |
||
| 14 | ** "Prodat-Mobile, selbstsigniertes Zertifkat erstellen":https://redmine.prodat-sql.de/projects/prodat-v12-public/wiki/Mobile_+_App_Zertifikate_Cert_f%C3%BCr_das_eigene_Intranet liefert ausführliche Anleitung, welche auch hier zutrifft |
||
| 15 | * Derzeit ist das Prodat nicht in der Lage zusätzlich zum verschlüsseln des Traffics auch das Zertifikat zu verifizieren |
||
| 16 | * Prodat benutzt jedoch wenn möglich SSL (TLS1.2) um zu verhindern, dass Passworte (Login) im Klartext über die Leitung gehen |
||
| 17 | * Im jeweiligen DATA directory des PG-Servers soll dann ein UNterverzeichniss 'ssl' angelegt werden, in welchem die Zertifikats-Dateien abgelegt werden |
||
| 18 | ** Unter Windows DARF das private key file NICHT passphrase protected sein !!! |
||
| 19 | ** Dies bedeutet, diese Datei liegt im Plain-PEM Format vor und der Key ist damit nicht gschützt, daher extra Verzeichniss, damit ACL's sauber darauf gesetzt werden können |
||
| 20 | ** SELECT pg_read_file(current_setting('ssl/ssl_key_file')); |
||
| 21 | *** Dies erlaubt JEDEM superuiser und JEDEM welcher Mitglied der System-Internen Rolle "pg_read_server_files" ist, den privaten key auszulesen !!! |
||
| 22 | *** problematische Rechte: |
||
| 23 | **** SUPERUSER |
||
| 24 | **** pg_read_server_files |
||
| 25 | **** pg_write_server_files |
||
| 26 | **** pg_execute_server_program |
||
| 27 | |||
| 28 | |||
| 29 | |||
| 30 | h2. postgresql.conf |
||
| 31 | |||
| 32 | * <pre><code class="conf"> |
||
| 33 | ssl = on |
||
| 34 | ssl_cert_file = 'ssl/pgserver.chain' |
||
| 35 | ssl_key_file = 'ssl/pgserver.key' |
||
| 36 | |||
| 37 | ssl_min_protocol_version = 'TLSv1.2' |
||
| 38 | ssl_max_protocol_version = 'TLSv1.2' |
||
| 39 | |||
| 40 | ssl_ciphers = 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:!aNULL:!eNULL:!MD5:!RC4:!3DES' |
||
| 41 | ssl_prefer_server_ciphers = on |
||
| 42 | </code></pre> |
||
| 43 | ** "Prodat-Mobile Anweisung":https://redmine.prodat-sql.de/projects/prodat-v12-public/wiki/Mobile_+_App_Zertifikate_Cert_f%C3%BCr_das_eigene_Intranet#Ben%C3%B6tigte-Zertifikats-Dateien-f%C3%BCr-Service-exportieren folgend, wäre pgserver.key der "Private Key" und pgserver.chain "Zertifikats-Kette (Chain)" |
||
| 44 | ** Der Rest der Configuratioin muss exakt so eingetragen werden |
||
| 45 | *** Prodat kann derzeit nur OpenSSL 1.0.2 Bibliotheken verwenden, welche maximal TLS1.2 anbieten |
||
| 46 | *** Die aufgelisteten Ciphers stellen sicher, das mit diesem älteren Standard keine unsicheren Verschlüsselungen ausgehandelt werden können |
||
| 47 | ** Unterordner für Zertifikate benutzen, damit ACL's gesetzt werden können, ohne anderes zu beeinflussen |
||
| 48 | 4 | [E] Rocco Kreutz | * "defaults":https://redmine.prodat-sql.de/projects/prodat-v12-public/wiki/710_Datenbankeinstellungen_und_Tuning_(postgresql_conf) |
| 49 | 1 | [E] Rocco Kreutz | |
| 50 | h2. pg_hba.conf |
||
| 51 | |||
| 52 | 2 | [E] Rocco Kreutz | * Abhängig davon, ob SSL nur erlaubt sein soll oder erforderlich sein soll, muss pg_hba.conf angepasst werden |
| 53 | 5 | [E] Rocco Kreutz | * Anstatt: <pre><code class="yaml">host all root,postgres,SYS.dblink,APPS 0.0.0.0/0 reject</code></pre> müssen jetzt 2 Zeilen eingetragen werden |
| 54 | <pre><code class="yaml">hostssl all root,postgres,SYS.dblink,APPS 0.0.0.0/0 reject # Standard-Super-User restrict by default from outside |
||
| 55 | 1 | [E] Rocco Kreutz | hostnossl all root,postgres,SYS.dblink,APPS 0.0.0.0/0 reject # Standard-Super-User restrict by default from outside</code></pre> |
| 56 | 3 | [E] Rocco Kreutz | ** Jeweils 1 für SSL und eine für ohne SSL |
| 57 | 4 | [E] Rocco Kreutz | * "defaults, SSL erlaubt, nicht erforderlich":https://redmine.prodat-sql.de/projects/prodat-v12-public/wiki/PostgreSQL_Netzwerkkonfiguration_(pg_hbaconf) |