Dovecot 2.3.4.1 zur Verwendung von TLSv1.2 zwingen

Dovecot 2.3.4.1 zur Verwendung von TLSv1.2 zwingen

Seit dem neuen Debian Buster-Update habe ich einige Probleme mit TLSv1.3.

Problem: Mein iOS-Mailclient konnte keine Verbindung zu meinem Mailserver (12.2) herstellen und ich möchte derzeit kein Upgrade durchführen. Daher versuche ich, eine Möglichkeit zu finden, TLSv1.3 mit Dovecot zu deaktivieren.

Die aktuellen Versionen sind: OpenSSL 1.1.1c und Dovecot 2.3.4.1

In Dovecot 2.3 werden die SSL-Einstellungen von ssl_protocols in ssl_min_protocol geändert.

# Minimum SSL protocol version to use. Potentially recognized values are SSLv3,
# TLSv1, TLSv1.1, and TLSv1.2, depending on the OpenSSL version used.

Ich möchte Dovecot jedoch zwingen, TLSv1.2 statt eines minimalen SSL-Protokolls zu verwenden, da Dovecot zuerst das höchste verfügbare SSL-Protokoll (TLSv1.3) ausprobieren würde. Wenn ich TLSv1.3 einstelle, wird TLSv1.2 nicht verwendet.

Weiß also jemand, wie man Dovecot 2.3.4.1 zur Verwendung von TLSv1.2 zwingt?

Antwort1

Keine vollständige Antwort, aber vielleicht Teil einer Lösung:

1. Ich habe die von @joffrey vorgeschlagene Lösung ausprobiert, konnte sie aber nicht zum Laufen bringen. Das Aktivieren oder Deaktivieren von TLSv1.3-Chiffresuites ssl_cipher_list scheint von Dovecot 2.3.4.1 völlig ignoriert zu werden. Es ssl_prefer_server_ciphershat auch keine Auswirkungen auf TLSv1.3. Egal, welche Dovecot-Einstellungen ich ausprobiert habe, ich konnte einen Client nicht daran hindern, TLSv1.3 auszuhandeln und eine beliebige TLSv1.3-Chiffresuite auszuwählen.

Dies hängt wahrscheinlich mit der Einführung einer neuen Methode zur Auswahl von TLSv1.3-Ciphersuites in OpenSSL 1.1.1 zusammen, zusätzlich zu der bereits vorhandenen Methode zur Auswahl von Chiffren für TLSv1.2 und darunter. Die OpenSSL-Entwickler waren sich der Unannehmlichkeiten bewusst, die dies verursachen würde, sagten jedoch, dass dies unvermeidlich sei, siehe https://github.com/openssl/openssl/pull/5392. Dovecot-Commit 8f6f04eb scheint die Grundlage für eine neue Dovecot-Option zu legen, die wahrscheinlich ssl_ciphersuitesals Frontend für die neue OpenSSL-Methode für TLSv1.3 bezeichnet werden soll, ebenfalls zusätzlich zu den bestehenden ssl_cipher_listfür TLSv1.2 und darunter. Dieses Commit wurde erstmals in Dovecot 2.3.9 aufgenommen, aber diese Version wurde noch nicht für Debian gepackt. Außerdem sehe ich die Option nicht im Dovecot-Commit erwähnt. NACHRICHToder Online-Dokumentation, also sind sie vielleicht noch nicht fertig.

2. Alternativ habe ich festgestellt, dass das Hinzufügen MaxProtocol = TLSv1.2zu /etc/ssl/openssl.cnffunktioniert (Warnung: dies wird auch das Verhalten vieler anderer Programme ändern, die OpenSSL verwenden!):

[system_default_sect]
MinProtocol = TLSv1.2
MaxProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2

Dies verhindert sofort, dass Dovecot 2.3.4.1 TLSv1.3 aushandelt. Es ist nicht einmal nötig, es neu zu starten. Aber wie oben gewarnt, betrifft diese Lösung auch andere Anwendungen, nicht nur Dovecot, und ist daher nur von begrenztem Nutzen.

Um die Einstellungen ausschließlich auf Dovecot auszurichten, habe ich versucht, eine Umgebungsvariable so festzulegen, dass sie auf eine bestimmte Konfigurationsdatei verweist:

# OPENSSL_CONF=/etc/ssl/openssl-max-tlsv12.cnf dovecot -F

Aber das hatte keine Auswirkungen auf Dovecot. Ich habe überprüft, ob die Variable in der Umgebung sichtbar war und ob sie für andere OpenSSL-Anwendungen funktionierte. Ich vermute jedoch, dass die OpenSSL-Bibliothek selbst keine Umgebungsvariablen betrachtet und dass es als Verantwortung des aufrufenden Programms (Dovecot) angesehen wird, den Inhalt der Variablen irgendwie an die Bibliothek zu übergeben. Ich bezweifle, dass Dovecot dies tut, da ich im Dovecot-Quellcode keine Verwendung der OpenSSL CONF-Bibliothek sehe. Ich konnte auch keinen Dovecot-Anwendungsabschnitt in der OpenSSL-Konfigurationsdatei zum Laufen bringen, noch habe ich Dovecot-Optionen zum Festlegen eines OpenSSL-Konfigurationsdateispeicherorts oder des zu verwendenden Anwendungsabschnittsnamens aus der OpenSSL-Konfigurationsdatei gefunden. Vielleicht weiß jemand anders, wie man OpenSSL-Einstellungen auf ein bestimmtes Programm statt auf das gesamte System ausrichtet?

3. Schließlich können Sie natürlich immer versuchen, den Quellcode zu bearbeiten. Für das aktuelle Debian-Dovecot-Paket könnten Sie mit dem Duplizieren beginnen diese Linie, ändern Sie SSL_CTX_set_min_proto_versiones in SSL_CTX_set_max_proto_versionund kompilieren Sie es dann neu. So weit wollte ich selbst eigentlich nicht gehen. Dann können Sie genauso gut direkt Upstream verwenden, anstatt das Distributionspaket.

Antwort2

Zuerst müssen Sie die Datei 10-ssl.conf suchen (normalerweise in /etc/dovecot/conf.d/).

Bearbeiten und zu der Zeile gehen, die enthältSSL-Protokolle(meine ist Zeile 52). In dieser Zeile können Sie auch Protokolle ablehnen. Sie können versuchen

ssl_protocols = TLSv1.2 !TLSv1.3

Antwort3

Ich habe es nicht versucht oder reproduziert, aber Sie könnten versuchen, diessl_min_protolauf TLSv1.2 und definierenSSL-Verschlüsselungslistekeinespezifische TLS1.3-Chiffren.

Antwort4

Sie können diesen Konfigurationsausschnitt verwenden, der in local.conf oder conf.d/10-ssl.conf abgelegt ist

# doveconf -n | grep -iE "tls|ssl"
ssl = required
ssl_ca = </path/to/ca/bundle.pem
ssl_cert = </path/to/cert.pem
ssl_cipher_list = ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384:!LOW@STRENGTH
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

verwandte Informationen