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 19:34. ] – [Certificate Signing Request erzeugen] 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 690: | Zeile 690: | ||
Auch hier sind die Eingaben sind in der Farbe < | Auch hier sind die Eingaben sind in der Farbe < | ||
- | ==== Schlüssel für das Serverzertifikat erzeugen ==== | ||
- | Nachdem wir nun unsere eigene CA erstellt haben, machen wir uns daran, endlich für unseren Server ein Zertifikat herausgeben. Hierzu erzeugen wir als erstes einen 4096 Bit langen RSA Schlüssel, den wir mit AES 256 verschlüsselt auf der Platte abgelegt lassen. Da OpenSSL keine leere Passphrase zulässt braucht die Passphrase diesmal nicht sonderlich geheim sein, da wir diese im Anschluss ohnehin sofort wieder entfernen werden. Alternativ können wir natürlich auch eine Passphrase vergeben und dieses Passwort dann in der Konfigurationsdatei // | ||
- | Die Eingaben sind in der Farbe < | + | == Laufzeit |
+ | Da wir die Laufzeit | ||
- | < | ||
- | <font style=" | ||
- | </ | ||
- | < | ||
- | <font style=" | ||
- | .......................................................................................................................................................................................................................++ | ||
- | ........................................................................................................................................................................................++ | ||
- | e is 65537 (0x10001) | ||
- | Enter pass phrase for serverkey.pem: | ||
- | <font style=" | ||
- | </ | ||
- | |||
- | 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=" | ||
- | writing RSA key</ | ||
- | </ | ||
- | |||
- | Wie schon zuvor schützen wir auch hier den Serverschlüssel über die Dateirechte, | ||
- | < | ||
- | <font style=" | ||
- | </ | ||
- | < | ||
- | <font style=" | ||
- | </ | ||
- | |||
- | ==== Certificate Signing Request erzeugen ==== | ||
- | Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((Certificate Signing Request)), den wir dann in einem weiteren Schritt von unserer eigenen CA signieren lassen werden, oder bei der ausgewählten **kommerziellen CA** einkippen. <WRAP round alert> **__Wichtig__**: | ||
- | |||
- | |||
- | # openssl req -new -key serverkey.pem -out csr.pem -nodes | ||
- | < | ||
- | into your certificate request. | ||
- | What you are about to enter is what is called a Distinguished Name or a DN. | ||
- | There are quite a few fields but you can leave some blank | ||
- | For some fields there will be a default value, | ||
- | If you enter ' | ||
- | ----- | ||
- | Country Name (2 letter code) [XX]:DE | ||
- | State or Province Name (full name) []:Bayern | ||
- | Locality Name (eg, city) [Default City]: | ||
- | Organization Name (eg, company) [Default Company Ltd]: | ||
- | Organizational Unit Name (eg, section) []: | ||
- | Common Name (eg, your name or your server' | ||
- | Email Address []: | ||
- | |||
- | Please enter the following ' | ||
- | to be sent with your certificate request | ||
- | A challenge password []: | ||
- | An optional company name []: | ||
- | </ | ||
- | <WRAP center round info> | ||
- | Wollen oder müssen wir ein kommerzielles Zertifikat, also von einer in den Browsern und mailclients von Haus aus installierten CAs, nutzen, so lassen wir den CSR der CA zukommen. | ||
- | # cat csr.pem | ||
- | < | ||
- | MIIE4TCCAskCAQAwgZsxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAP | ||
- | BgNVBAcMCFBsaWVuaW5nMRMwEQYDVQQKDApuYXVzY2gub3JnMRMwEQYDVQQLDApQ | ||
- | b3N0b2ZmaWNlMRgwFgYDVQQDDA9tYWlsLm5hdXNjaC5vcmcxJDAiBgkqhkiG9w0B | ||
- | CQEWFXBvc3RtYXN0ZXJAbmF1c2NoLm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIP | ||
- | ADCCAgoCggIBAJdbTDxgm4j1NAQjx3Lynu9E748Fntw3ercL3iwvdbyyw3/ | ||
- | v1cfP5T0g7Vgl2UbIUK1tQzcaCN38J2r+9BcxOqk4sh9WOI2ZpZOzMLMYWWtuGak | ||
- | ieIXH9Bmp/ | ||
- | AOvYlS8bIORGmV3aJtwt+9vu3qBFomwgU5Wz76E5vKrRxtpQJumQjnJup/ | ||
- | ZtvasYNXP2ZgY4fKD0j24oU8XmpyjRc51vGcqk8UeagYRyrqEcqOMZGbC7WnugS4 | ||
- | yVFU+PAvR2SoAyRAXDeZBRXygxW/ | ||
- | BNBJdrNAg6HSeF6NGiSesPakIfY4w2u2Syv2+IUqWwtGxhpvn8zhnBY+PQEct7dz | ||
- | rgsX7eT2/ | ||
- | D/ | ||
- | SLRlpkxfdEs67k/ | ||
- | gbW1cuCeFDm6Abl1qW4s7qcu05ZADtXthWBTvbVC1P3aotzDWCVClGizAgMBAAGg | ||
- | ADANBgkqhkiG9w0BAQsFAAOCAgEAD+1+9NQMWfOnIFjgZWRf4eQpT7kJZxuA+bYW | ||
- | 63HA0EPe7FURWqbJfSL8RQdEaT42MzNeSXVTSfhbe4CsVB3ta2xoqQOEhiOQSDLz | ||
- | zgIF2+PxexV1a8BSw/ | ||
- | WQ/ | ||
- | ZC8llcF4qVQKzqFMv7gYc8F1ckD1ch11H3q7CjrfzHYbiUS8rHaiSjHG48k+Uqwj | ||
- | ndArSDug4mQNazI/ | ||
- | icPCIsaCSu0TkvUWyGJRUILoA1mBjnnFV9H9z9NW6Ttsm86MGyve3Va3xrknkGCB | ||
- | YX0U+4SObf2CONB5UC/ | ||
- | FF6oDA7wsbG+Oub1fHeo75m1O0G+MHzTwbJq0IKcPV5rsX+PFAa7qRMbYhlG0V+i | ||
- | ji99uAL3jgCUxq670avy9vVanj96/ | ||
- | UAcbeW4+RoAly/ | ||
- | StvlMGo= | ||
- | -----END CERTIFICATE REQUEST----- | ||
- | </ | ||
- | </ | ||
- | |||
- | Bei Interesse können wir uns unseren **CSR** auch ansehen, dazu benutzen wir folgenden Befehl: | ||
- | # openssl req -noout -text -in csr.pem | ||
- | < | ||
- | Data: | ||
- | Version: 0 (0x0) | ||
- | Subject: C=DE, ST=Bayern, L=Pliening, O=nausch.org, | ||
- | Subject Public Key Info: | ||
- | Public Key Algorithm: rsaEncryption | ||
- | Public-Key: (4096 bit) | ||
- | Modulus: | ||
- | 00: | ||
- | 9e: | ||
- | 75: | ||
- | 83: | ||
- | f0: | ||
- | 66: | ||
- | 1f: | ||
- | ff: | ||
- | 14: | ||
- | 00: | ||
- | fb: | ||
- | bc: | ||
- | 68: | ||
- | 0f: | ||
- | aa: | ||
- | 0b: | ||
- | 03: | ||
- | a1: | ||
- | dc: | ||
- | 83: | ||
- | c3: | ||
- | 9f: | ||
- | ed: | ||
- | 1b: | ||
- | 4f: | ||
- | 0f: | ||
- | de: | ||
- | 14: | ||
- | 23: | ||
- | 5c: | ||
- | 60: | ||
- | 33: | ||
- | 01: | ||
- | 85: | ||
- | 94:68:b3 | ||
- | Exponent: 65537 (0x10001) | ||
- | Attributes: | ||
- | a0:00 | ||
- | Signature Algorithm: sha256WithRSAEncryption | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | </ | ||
- | |||
- | ==== Serverzertifikat signieren ==== | ||
- | Bevor wir nun unser eigenes Zertifikat mit Hilfe unserer eigenen **CA** signieren können, passen wir in der OpenSSL-Konfigurationsdatei die Laufzeit **default_days** an, da wir diese nicht auf der Komandozeile übergeben können. | ||
# vim / | # vim / | ||
<file bash / | <file bash / | ||
Zeile 1223: | Zeile 1051: | ||
</ | </ | ||
- | Außerdem verschieben wir den privaten Schlüssel unserer CA nach **/ | ||
- | # mv / | ||
- | Kommen wir zum krönenden Abschluss - wir signieren nun das Server-Zertifikat durch unsere CA: | + | |
- | | + | ==== Schlüssel für das Serverzertifikat erzeugen ==== |
- | < | + | Nachdem wir nun unsere eigene CA erstellt haben, machen wir uns daran, endlich für unseren Server ein Zertifikat herausgeben. Hierzu erzeugen wir als erstes einen 4096 Bit langen RSA Schlüssel, den wir mit AES 256 verschlüsselt auf der Platte abgelegt lassen. Da OpenSSL keine leere Passphrase zulässt braucht die Passphrase diesmal nicht sonderlich geheim sein, da wir diese im Anschluss ohnehin sofort wieder entfernen werden. Alternativ können wir natürlich auch eine Passphrase vergeben und dieses Passwort dann in der Konfigurationsdatei // |
- | Enter pass phrase for / | + | |
- | Check that the request matches the signature | + | Die Eingaben sind in der Farbe < |
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | .......................................................................................................................................................................................................................++ | ||
+ | ........................................................................................................................................................................................++ | ||
+ | e is 65537 (0x10001) | ||
+ | Enter pass phrase for serverkey.pem: | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | 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=" | ||
+ | writing RSA key</ | ||
+ | </ | ||
+ | |||
+ | Wie schon zuvor schützen wir auch hier den Serverschlüssel über die Dateirechte, | ||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | ==== Certificate Signing Request erzeugen ==== | ||
+ | Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((Certificate Signing Request)), den wir dann in einem weiteren Schritt von unserer eigenen CA signieren lassen werden, oder bei der ausgewählten **kommerziellen CA** einkippen. <WRAP round alert> **__Wichtig__**: | ||
+ | |||
+ | Auch hier sind die Eingaben in der Farbe < | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | into your certificate request. | ||
+ | What you are about to enter is what is called a Distinguished Name or a DN. | ||
+ | There are quite a few fields but you can leave some blank | ||
+ | For some fields there will be a default value, | ||
+ | If you enter ' | ||
+ | ----- | ||
+ | Country Name (2 letter code) [XX]:</ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | Please enter the following ' | ||
+ | to be sent with your certificate request | ||
+ | A challenge password []: | ||
+ | An optional company name []:</ | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info> | ||
+ | Wollen oder müssen wir ein kommerzielles Zertifikat, also von einer in den Browsern und mailclients von Haus aus installierten CAs, nutzen, so lassen wir den CSR der CA zukommen. | ||
+ | # cat csr.pem | ||
+ | < | ||
+ | MIIE4TCCAskCAQAwgZsxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAP | ||
+ | BgNVBAcMCFBsaWVuaW5nMRMwEQYDVQQKDApuYXVzY2gub3JnMRMwEQYDVQQLDApQ | ||
+ | b3N0b2ZmaWNlMRgwFgYDVQQDDA9tYWlsLm5hdXNjaC5vcmcxJDAiBgkqhkiG9w0B | ||
+ | CQEWFXBvc3RtYXN0ZXJAbmF1c2NoLm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIP | ||
+ | ADCCAgoCggIBAJdbTDxgm4j1NAQjx3Lynu9E748Fntw3ercL3iwvdbyyw3/ | ||
+ | v1cfP5T0g7Vgl2UbIUK1tQzcaCN38J2r+9BcxOqk4sh9WOI2ZpZOzMLMYWWtuGak | ||
+ | ieIXH9Bmp/ | ||
+ | AOvYlS8bIORGmV3aJtwt+9vu3qBFomwgU5Wz76E5vKrRxtpQJumQjnJup/ | ||
+ | ZtvasYNXP2ZgY4fKD0j24oU8XmpyjRc51vGcqk8UeagYRyrqEcqOMZGbC7WnugS4 | ||
+ | yVFU+PAvR2SoAyRAXDeZBRXygxW/ | ||
+ | BNBJdrNAg6HSeF6NGiSesPakIfY4w2u2Syv2+IUqWwtGxhpvn8zhnBY+PQEct7dz | ||
+ | rgsX7eT2/ | ||
+ | D/ | ||
+ | SLRlpkxfdEs67k/ | ||
+ | gbW1cuCeFDm6Abl1qW4s7qcu05ZADtXthWBTvbVC1P3aotzDWCVClGizAgMBAAGg | ||
+ | ADANBgkqhkiG9w0BAQsFAAOCAgEAD+1+9NQMWfOnIFjgZWRf4eQpT7kJZxuA+bYW | ||
+ | 63HA0EPe7FURWqbJfSL8RQdEaT42MzNeSXVTSfhbe4CsVB3ta2xoqQOEhiOQSDLz | ||
+ | zgIF2+PxexV1a8BSw/ | ||
+ | WQ/ | ||
+ | ZC8llcF4qVQKzqFMv7gYc8F1ckD1ch11H3q7CjrfzHYbiUS8rHaiSjHG48k+Uqwj | ||
+ | ndArSDug4mQNazI/ | ||
+ | icPCIsaCSu0TkvUWyGJRUILoA1mBjnnFV9H9z9NW6Ttsm86MGyve3Va3xrknkGCB | ||
+ | YX0U+4SObf2CONB5UC/ | ||
+ | FF6oDA7wsbG+Oub1fHeo75m1O0G+MHzTwbJq0IKcPV5rsX+PFAa7qRMbYhlG0V+i | ||
+ | ji99uAL3jgCUxq670avy9vVanj96/ | ||
+ | UAcbeW4+RoAly/ | ||
+ | StvlMGo= | ||
+ | -----END CERTIFICATE REQUEST----- | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Bei Interesse können wir uns unseren **CSR** auch ansehen, dazu benutzen wir folgenden Befehl: | ||
+ | # openssl req -noout -text -in csr.pem | ||
+ | < | ||
+ | Data: | ||
+ | Version: 0 (0x0) | ||
+ | Subject: C=DE, ST=Bayern, L=Pliening, O=nausch.org, | ||
+ | Subject Public Key Info: | ||
+ | Public Key Algorithm: rsaEncryption | ||
+ | Public-Key: (4096 bit) | ||
+ | Modulus: | ||
+ | 00: | ||
+ | 9e: | ||
+ | 75: | ||
+ | 83: | ||
+ | f0: | ||
+ | 66: | ||
+ | 1f: | ||
+ | ff: | ||
+ | 14: | ||
+ | 00: | ||
+ | fb: | ||
+ | bc: | ||
+ | 68: | ||
+ | 0f: | ||
+ | aa: | ||
+ | 0b: | ||
+ | 03: | ||
+ | a1: | ||
+ | dc: | ||
+ | 83: | ||
+ | c3: | ||
+ | 9f: | ||
+ | ed: | ||
+ | 1b: | ||
+ | 4f: | ||
+ | 0f: | ||
+ | de: | ||
+ | 14: | ||
+ | 23: | ||
+ | 5c: | ||
+ | 60: | ||
+ | 33: | ||
+ | 01: | ||
+ | 85: | ||
+ | 94:68:b3 | ||
+ | Exponent: 65537 (0x10001) | ||
+ | Attributes: | ||
+ | a0:00 | ||
+ | Signature Algorithm: sha256WithRSAEncryption | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ==== eigene CA: CSR beabeiten - Zertifikat erstellen ==== | ||
+ | Kommen wir zum krönenden Abschluss - wir signieren nun das Server-Zertifikat durch unsere CA, oder anders ausgedrückt, | ||
+ | |||
+ | Wie schon bereits bei den anderen Konfigurationsbeispielen, | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | Enter pass phrase for / | ||
+ | <font style=" | ||
Signature ok | Signature ok | ||
Certificate Details: | Certificate Details: | ||
Zeile 1255: | Zeile 1268: | ||
Certificate is to be certified until Jul 22 13:00:41 2016 GMT (730 days) | Certificate is to be certified until Jul 22 13:00:41 2016 GMT (730 days) | ||
- | Sign the certificate? | + | Sign the certificate? |
+ | <font style=" | ||
+ | 1 out of 1 certificate requests certified, commit? [y/ | ||
+ | <font style=" | ||
+ | Data Base Updated</ | ||
+ | </ | ||
- | 1 out of 1 certificate requests certified, commit? [y/n]y | + | ===== Zertifikat- und Schlüsseldatei ===== |
- | Write out database with 1 new entries | + | ==== Speicherort |
- | Data Base Updated | + | |
- | </ | + | |
- | + | ||
- | ==== Schlüsseldateien ablegen | + | |
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 1274: | Zeile 1288: | ||
Anschließend legen wir dort die drei benötigten Dateien ab: | Anschließend legen wir dort die drei benötigten Dateien ab: | ||
- | - unseren // | + | - unseren // |
- | - unseren // | + | - unseren // |
- | - das // | + | - das // |
- | und schützen diese Dateien mit den Dateirechten **400**: | + | - und schützen diese Dateien mit den Dateirechten **400**: < |
- | # mv / | + | # chmod 400 / |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
==== Zertifikatsketten ==== | ==== Zertifikatsketten ==== | ||
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 1373: | 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 1423: | 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 1438: | 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 1624: | 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 1752: | 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 1757: | Zeile 1914: | ||
* **[[wiki: | * **[[wiki: | ||
* **[[http:// | * **[[http:// | ||
- | |||
- | ~~DISCUSSION~~ | ||
- | |||