Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| centos:mail_c7:dovecot_4 [25.07.2014 20:17. ] – [Zertifikat- und Schlüsseldatei ablegen] django | centos:mail_c7:dovecot_4 [22.07.2019 14:48. ] (aktuell) – [Links] django | ||
|---|---|---|---|
| Zeile 141: | Zeile 141: | ||
| </ | </ | ||
| - | ==== Cipher-Suites und Diffie-Hellmann | + | ==== Cipher-Suites und Diffie-Hellman |
| Möchte man in Erfahrung bringen, welche Cipher-Suites((Sammlung von standardisierten kryptographischer Algorithmen)) unser installiertes OpenSSL-Paket mitbringt, können wir wie folgt abfragen((Ausgabe in formatierter Tabelle)). | Möchte man in Erfahrung bringen, welche Cipher-Suites((Sammlung von standardisierten kryptographischer Algorithmen)) unser installiertes OpenSSL-Paket mitbringt, können wir wie folgt abfragen((Ausgabe in formatierter Tabelle)). | ||
| # openssl ciphers -v | # openssl ciphers -v | ||
| Zeile 682: | Zeile 682: | ||
| < | < | ||
| - | <font style=" | + | <font style=" |
| </ | </ | ||
| < | < | ||
| Zeile 1072: | Zeile 1072: | ||
| Wie schon erwähnt, entfernen wir die Passphrase nun wieder, in dem wir bei der Frage **Enter pass phrase:** einfach die Taste **[ENTER]** drücken. | Wie schon erwähnt, entfernen wir die Passphrase nun wieder, in dem wir bei der Frage **Enter pass phrase:** einfach die Taste **[ENTER]** drücken. | ||
| < | < | ||
| - | <font style=" | + | <font style=" |
| </ | </ | ||
| < | < | ||
| Zeile 1276: | Zeile 1276: | ||
| </ | </ | ||
| - | ===== Zertifikat- und Schlüsseldatei | + | ===== Zertifikat- und Schlüsseldatei ===== |
| ==== Speicherort ==== | ==== Speicherort ==== | ||
| Bei der Dovecot-Installation wurde bereits der Unterordner für das Dovecot-Zertifikates und der zugehörigen Schlüssel-Datei unter **/ | Bei der Dovecot-Installation wurde bereits der Unterordner für das Dovecot-Zertifikates und der zugehörigen Schlüssel-Datei unter **/ | ||
| Zeile 1297: | Zeile 1297: | ||
| Handelt es sich bei der CA um eine mehrstufige CA, so hat man nicht nur ein Zertifikatsfile der RootCA, sondern auch weitere, wie z.B. ein Zwischenzertifikat. | Handelt es sich bei der CA um eine mehrstufige CA, so hat man nicht nur ein Zertifikatsfile der RootCA, sondern auch weitere, wie z.B. ein Zwischenzertifikat. | ||
| - | Damit Dovecot mit solchen Zertifikaten umgehen kann, ist es notwendig, dass die einzelnen Inhalte der Zertifikats-Dateien in eine gemeinsame Datei kopiert werden. Folgende Reihenfolge ist dringend | + | Damit Dovecot mit solchen Zertifikaten umgehen kann, ist es notwendig, dass die einzelnen Inhalte der Zertifikats-Dateien in eine gemeinsame Datei kopiert werden. Folgende Reihenfolge ist dabei **__dringend__** |
| - Dovecot' | - Dovecot' | ||
| - TDC SSL Server CA | - TDC SSL Server CA | ||
| Zeile 1383: | Zeile 1383: | ||
| # vim / | # vim / | ||
| - | <file bash / | + | <file bash / |
| - | ## SSL settings | + | ## SSL settings |
| - | ## | + | ## |
| # SSL/TLS support: yes, no, required. < | # SSL/TLS support: yes, no, required. < | ||
| # disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps | # disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps | ||
| - | # plain imap and pop3 are still allowed for local connections | + | # plain imap and pop3 are still allowed for local connections |
| - | ssl = required | + | ssl = required |
| # PEM encoded X.509 SSL/TLS certificate and private key. They' | # PEM encoded X.509 SSL/TLS certificate and private key. They' | ||
| - | # dropping root privileges, so keep the key file unreadable by anyone but | + | # dropping root privileges, so keep the key file unreadable by anyone but |
| - | # root. Included doc/ | + | # root. Included doc/ |
| - | # certificate, | + | # certificate, |
| - | # Django : 2014-04-09 | + | # Django : 2015-06-09 |
| - | # old : ssl_cert = </ | + | # old : ssl_cert = </ |
| - | # ssl_key = </ | + | # ssl_key = </ |
| - | ssl_cert = </ | + | ssl_cert = </ |
| - | ssl_key = </ | + | ssl_key = </ |
| # If key file is password protected, give the password here. Alternatively | # If key file is password protected, give the password here. Alternatively | ||
| # give it when starting dovecot with -p parameter. Since this file is often | # give it when starting dovecot with -p parameter. Since this file is often | ||
| # world-readable, | # world-readable, | ||
| - | # root owned 0600 file by using ssl_key_password = <path. | + | # root owned 0600 file by using ssl_key_password = < |
| - | # | + | # |
| # PEM encoded trusted certificate authority. Set this only if you intend to use | # PEM encoded trusted certificate authority. Set this only if you intend to use | ||
| # ssl_verify_client_cert=yes. The file should contain the CA certificate(s) | # ssl_verify_client_cert=yes. The file should contain the CA certificate(s) | ||
| # followed by the matching CRL(s). (e.g. ssl_ca = </ | # followed by the matching CRL(s). (e.g. ssl_ca = </ | ||
| - | #ssl_ca = | + | #ssl_ca = |
| # Require that CRL check succeeds for client certificates. | # Require that CRL check succeeds for client certificates. | ||
| Zeile 1433: | Zeile 1433: | ||
| # DH parameters length to use. | # DH parameters length to use. | ||
| - | # | + | # Django : 2015-05-21 |
| + | # default: | ||
| + | ssl_dh_parameters_length=4096 | ||
| + | |||
| + | # Weekly regeneration of the ssl-parameters | ||
| + | # Django : 2015-06-10 | ||
| + | # default: ssl_parameters_regenerate = 0 | ||
| + | # ssl_parameters_regenerate = 2 hours | ||
| + | # Won't work since dovecot 2.2! | ||
| + | # Update ssl_dh_parameters_length with script dh-params | ||
| + | # https:// | ||
| # SSL protocols to use | # SSL protocols to use | ||
| - | # | + | # Django : 2014-10-16 |
| + | # default: | ||
| + | ssl_protocols = !SSLv2 !SSLv3 | ||
| # SSL ciphers to use | # SSL ciphers to use | ||
| - | # | + | # Django : 2014-10-16 |
| + | # default: | ||
| + | ssl_cipher_list = EECDH+ECDSA+AESGCM: | ||
| # Prefer the server' | # Prefer the server' | ||
| - | # | + | # Django : 2015-05-20 |
| + | # default: | ||
| + | ssl_prefer_server_ciphers = yes | ||
| # SSL crypto device to use, for valid values run " | # SSL crypto device to use, for valid values run " | ||
| Zeile 1448: | Zeile 1464: | ||
| </ | </ | ||
| + | Über den Paramter **ssl** kann man steuern, ob **SSL/TLS** nun verwendet werden kann, oder ob es verwendet werden muss, oder eben nicht. Wir lassen den Default-Wert // | ||
| + | |||
| + | === Diffie-Hellman-Verfahren und Perfect Forward Secrecy | ||
| + | Wie am Anfang des Artikels bereits angeschnitten, | ||
| + | |||
| + | Dovecot stellt das normale **[[http:// | ||
| + | |||
| + | <WRAP center round important 85%> | ||
| + | **Wichtig**: | ||
| + | Die **Diffie-Hellman-Parameter** werden beim ersten Start des Dovecot-Daemon erzeugt und in der Datei **// / | ||
| + | |||
| + | Entgegen den Angaben im Abschnitt **SSL security settings** im [[http:// | ||
| + | |||
| + | Die Hintergründe und die Lösung zu diesem Problem, basieren auf den Hinweisen von **// | ||
| + | </ | ||
| + | |||
| + | Wir werden also das Wechseln der **Diffie-Hellman-Parameter** werden wir also selbst in die Hand nehmen. Dies erfolgt in zwei Schritten. | ||
| + | - **Parameterdatei erstellen** und | ||
| + | - **Dovecot die neuen Parameter bekanntgeben** | ||
| + | |||
| + | Die Erzeugung der **DH-Parameter-Datei** erfolgt mit Hilfe des Programms **ssl-params** aus dem Verzeichnis // | ||
| + | # vim / | ||
| + | |||
| + | <file bash / | ||
| + | # Länge der Diffie-Hellman-Parameter, | ||
| + | ssl_dh_parameters_length = 4096 | ||
| + | # | ||
| + | # Speicherort der Diffie-Hellman-Parameter-Datei ssl-parameters.dat | ||
| + | state_dir = / | ||
| + | </ | ||
| + | |||
| + | Als nächstes erzeugen wir noch das temporäre Verzeichnis, | ||
| + | # mkdir / | ||
| + | |||
| + | Das Erzeugen erfolgt nun mit Hilfe des folgenden Aufrufs. | ||
| + | # / | ||
| + | |||
| + | Dovecot können wir nun leider nicht anweisen, direkt diese Parameterdatei zu laden. Wir werden daher unsere neu generierte Datei an Ort und Stelle verschieben, | ||
| + | # /usr/bin/mv / | ||
| + | |||
| + | Anschließend führen wir einen Reload des Dovecot-Daemon durch, damit dieser diese DH-Parameter neu einliest. | ||
| + | # systemctl reload dovecot | ||
| + | |||
| + | Da wir in regelmäßigen Abständen die Diffie-Hellman Parameter neu generieren wollen, verpacken wir die gerade gezeigten Schritte in ein Script verlagern. | ||
| + | # vim / | ||
| + | |||
| + | <file bash / | ||
| + | # Diffie-Hellman Parameter Datei erzeugen | ||
| + | / | ||
| + | |||
| + | # Hostname und Datum holen | ||
| + | NAME=`hostname -s` | ||
| + | DATUM=`date +'%b %e %H: | ||
| + | |||
| + | # Parameterdatei für Dovecot bereitstellen | ||
| + | /usr/bin/mv / | ||
| + | |||
| + | # Informationen zur neuen Parameterdatei im Maillog vermerken | ||
| + | echo " | ||
| + | |||
| + | # Dovecot die neuen DH-Parameter bekannt geben | ||
| + | / | ||
| + | |||
| + | # Temporäres Verzeichnis leeren | ||
| + | /usr/bin/rm / | ||
| + | </ | ||
| + | |||
| + | Damit das Script nun auch ausgeführt werden kann, versehen wir es noch mit den **x**-Ausführungsrechten. | ||
| + | # chmod +x / | ||
| + | |||
| + | Das regelmäßige Erneuern der DH-Parameter erfolgt nun regelmäßig und wir im Maillog entsprechend dokumentiert. | ||
| + | |||
| + | # less / | ||
| + | |||
| + | Jun 9 20:08:31 vml000077 dovecot: ssl-params(4526): | ||
| + | Jun 9 20:08:31 vml000077 dovecot: master: Warning: SIGHUP received - reloading configuration | ||
| Zeile 1634: | Zeile 1726: | ||
| ===== Dovecot Verbindungstest ===== | ===== Dovecot Verbindungstest ===== | ||
| + | ==== openssl ==== | ||
| Zum Testen der kompletten Konfigurationsänderungen greifen wir auf die Bibliothek **openssl** zurück. Im nachfolgendem Beispiel bauen wir eine Verbindung von einem entferneten Linux-Host im eigenen Netz auf. Somit haben wir auch gleich noch den Test, ob es ggf. nicht eine Firewall gibt, die unseren Verbindungsaufbauwunsch unter Umständen blockiert. | Zum Testen der kompletten Konfigurationsänderungen greifen wir auf die Bibliothek **openssl** zurück. Im nachfolgendem Beispiel bauen wir eine Verbindung von einem entferneten Linux-Host im eigenen Netz auf. Somit haben wir auch gleich noch den Test, ob es ggf. nicht eine Firewall gibt, die unseren Verbindungsaufbauwunsch unter Umständen blockiert. | ||
| - | Nach Herstellen der Verbindung loggen wir uns einfach wieder vom System ab, in dem wir die Zeichenfolge **42 logout** | + | Nach Herstellen der Verbindung loggen wir uns einfach wieder vom System ab, in dem wir die Zeichenfolge **42 logout** |
| $ openssl s_client -starttls imap -connect 10.0.0.70: | $ openssl s_client -starttls imap -connect 10.0.0.70: | ||
| < | < | ||
| Zeile 1762: | Zeile 1856: | ||
| Jul 23 16:39:08 vml000070 dovecot: imap-login: Aborted login (no auth attempts in 5 secs): user=<>, | Jul 23 16:39:08 vml000070 dovecot: imap-login: Aborted login (no auth attempts in 5 secs): user=<>, | ||
| + | |||
| + | |||
| + | Wollen wir unser Produktiv-System überprüfen, | ||
| + | * **IMAP** und **START/ | ||
| + | * **IMAP** und **SSL**: < | ||
| + | * **POP3** und **SSL**: < | ||
| + | |||
| + | Finden wir in der Ausgabe eine der nachfolgenden Angaben, ist alles bestens, der IMAP-Server unterstützt **//Perfect Forward Secrecy//** | ||
| + | |||
| + | * **Protocol** : \\ TLSv1.2 \\ < | ||
| + | * **Cipher** : \\ ECDHE-RSA-AES256-GCM-SHA384 \\ DHE-RSA-AES256-GCM-SHA384 | ||
| + | |||
| + | <WRAP center round important> | ||
| + | **Wichtig: | ||
| + | </ | ||
| + | |||
| + | ==== cipherscan ==== | ||
| + | Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https:// | ||
| + | |||
| + | Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden. | ||
| + | # / | ||
| + | |||
| + | < | ||
| + | Target: imap.nausch.org: | ||
| + | |||
| + | prio ciphersuite | ||
| + | 1 | ||
| + | 2 | ||
| + | 3 | ||
| + | 4 | ||
| + | 5 | ||
| + | 6 | ||
| + | 7 | ||
| + | 8 | ||
| + | 9 | ||
| + | 10 DHE-RSA-CAMELLIA256-SHA | ||
| + | 11 DHE-RSA-AES128-GCM-SHA256 | ||
| + | 12 DHE-RSA-AES128-SHA256 | ||
| + | 13 DHE-RSA-AES128-SHA | ||
| + | 14 DHE-RSA-SEED-SHA | ||
| + | 15 DHE-RSA-CAMELLIA128-SHA | ||
| + | |||
| + | Certificate: | ||
| + | TLS ticket lifetime hint: 300 | ||
| + | OCSP stapling: not supported | ||
| + | Cipher ordering: server | ||
| + | Curves ordering: server | ||
| + | Curves fallback: False | ||
| + | </ | ||
| + | |||
| + | Die Bewertung der einzelnen Chiffren müssen wir hier immer noch selbst vornehmen; hilfreiche Informationen hierzu findet man z.B. im Buch **// | ||
| + | |||
| + | |||
| ====== Links ====== | ====== Links ====== | ||
| Zeile 1767: | Zeile 1914: | ||
| * **[[wiki: | * **[[wiki: | ||
| * **[[http:// | * **[[http:// | ||
| - | |||
| - | ~~DISCUSSION~~ | ||
| - | |||