Ich muss das TLS 1.1-Protokoll für die SSL-Verbindung in PostgreSQL konfigurieren.
Ich konnte die Protokolleinstellungen in der PostgreSQL-Konfiguration nicht sehen
Es ist erforderlich, SSL-Protokolle und TLSv1 zu deaktivieren und nur TLSv1.1 (oder TLSv1.2) zu aktivieren.
Hinzugefügt
Für PCI DSS v3.1 muss der Fallback auf SSL und TLSv1 deaktiviert sein.
Ist es möglich, PostgreSQL so zu konfigurieren, dass nur mit TLSv1.1 verhandelt wird?
Wenn Sie wissen, dass dies nicht möglich ist, teilen Sie diese Informationen bitte mit
Hinzugefügt 2
Leider reicht die Konfiguration von ssl_ciphers
nicht aus, da Sie dieselben Chiffren für verschiedene Protokolle verwenden können. Die Konfiguration muss SSL_METHOD
wie hier beschrieben erfolgen:
https://www.openssl.org/docs/manmaster/ssl/ssl.html .
Mein Fazit, dass die Konfiguration von SSL_METHOD
(oder SSL_PROTOCOL
) in der PostgreSQL-Konfiguration fehlt und es keine Beschwerde bei PCI DSS 3.1 geben kann.
Bitte korrigieren Sie mich, wenn ich falsch liege.
quelle
Antworten:
@BrianEfting war korrekt. Sie können die entsprechenden Cipher Suites angeben, um nur TLSv1.2 zuzulassen, das Ihren PCI-DSS 3.1-Spezifikationsanforderungen entsprechen sollte.
Verwenden einer solchen Verschlüsselungsliste in der
ssl_ciphers
Option in Ihrempostgresql.conf
:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
sollte zusammen mit der Einstellung
ssl_prefer_server_ciphers=true
ausreichen, um nur TLSv1.2-Verbindungen zuzulassen.Sie können dies mit SSLyze überprüfen, das das PostgreSQL-Protokoll kennt.
Zum Testen habe ich den folgenden Befehl verwendet:
./sslyze.py --sslv2 --sslv3 --tlsv1 --tlsv1_1 --tlsv1_2 localhost:5432 --starttls=postgres --hide_rejected_ciphers
Dies ergab die folgende Ausgabe unter PostgreSQL 9.4 unter Debian Wheezy, aus der hervorgeht, dass alle Cipher Suites mit Ausnahme der angegebenen TLSv1.2-Chiffren abgelehnt wurden, die die Anforderungen von PCI-DSS 3.1 durch Verwendung von TLSv1.1 oder höher erfüllen sollten.
quelle
ssl_min_protocol_version=TLSv1.1
Über den folgenden Link:
18.3. Verbindungen und Authentifizierung (PostgreSQL 9.4 Handbuch)
Es scheint, dass Sie die
ssl_ciphers
Option verwenden können, um Ihre Liste der akzeptierten Chiffren anzugeben. Und es wird erwähnt, dass es folgt, was auch immer Ihre Version von OpenSSL unterstützt.Und in diesem Link:
OpenSSL-Chiffren (OpenSSL.org)
Erwähnt, dass es für TLSv1.1 keine spezifische Chiffrensuite gibt, Sie jedoch TLSv1.2 angeben können.
quelle
ssl_ciphers
nicht aus, da Sie dieselben Chiffren für verschiedene Protokolle verwenden können. Die Konfiguration mussSSL_METHOD
wie hier beschrieben erfolgen: openssl.org/docs/manmaster/ssl/ssl.html . Mein Fazit, dass die Konfiguration vonSSL_METHOD
(oderSSL_PROTOCOL
) in der PostgreSQL-Konfiguration fehlt und es keine Beschwerde bei PCI DSS 3.1 geben kann. Bitte korrigieren Sie mich, wenn ich falsch liege.Sie können die Protokolle (TLSv1.2) anstelle einer feinkörnigen Liste von Chiffren in der conf-Datei angeben.
Verweise:
Ändern Sie die Datei postgresql.conf
Starten Sie den Dienst neu
Führen Sie den Test erneut aus
quelle
Dies sollte es tun, wenn Sie die Standardeinstellungen zum Starten verwenden:
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL:!SSLv3'
Es behandelt auch TLS1.1, TLS1.0 und SSLv2 in neueren Versionen von openssl. (Informationen zum + 3DES-Hack finden Sie in den Postgresql-Dokumenten. Es scheint in neueren Versionen von openssl behoben worden zu sein.)
Wenn nicht oder wenn Sie expliziter sein möchten, fügen Sie einfach Folgendes hinzu:
':!SSLv2:!SSLv3:!TLSv1'
TLSv1.1
ist ebenfalls veraltet, daher empfehle ich auch das Anhängen':!TLSv1.1'
Dies ergibt eine endgültige "sichere" Verschlüsselungszeichenfolge basierend auf der Standardeinstellung wie folgt:
HIGH:MEDIUM:+3DES:!aNULL:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
Sie können mit Ihrer Version von openssl Folgendes testen:
openssl ciphers -v MY_CIPHER_STRING | column -t
Hier werden alle Chiffren aufgelistet, die in ihrem Protokoll enthalten sein werden.
Beispielausgabe mit der obigen Liste "sicherer" Chiffren (opensslv1.0.1):
IN ACHT NEHMEN
Die Chiffresuite SSLv3 (ebenfalls TLSv1 usw.) wird auf alle von SSLv3 unterstützten Chiffren erweitert . Dies bedeutet, dass dieselben Chiffren auch in höheren Protokollen ausgeschlossen werden (sofern sie dort vorhanden sind).
Demonstrieren:
openssl ciphers 'TLSv1:!SSLv3'
Ausgabe:
Das heißt, da jede in SSLv3 verfügbare Verschlüsselung auch in TLSv1 verfügbar ist, werden keine Chiffren zurückgegeben.
Wie vom OP festgestellt, bedeutet dies, dass es keine Möglichkeit gibt, SSLv3 über die Verschlüsselungsliste zu deaktivieren, ohne dieselbe Verschlüsselung auch für höhere Protokolle auszuschließen
In der Praxis sollte dies nur zu einer besseren Sicherheit führen, kann jedoch Probleme für Personen mit Abwärtskompatibilitätsanforderungen verursachen ( muss TLSv1.0 unterstützen und kann beispielsweise SSLv3 nicht unterstützen).
Da TLSv1.1 keine neuen Chiffren enthält, wird es auch deaktiviert, wenn Sie es verwenden
!SSLv3
.Achtung!
quelle