Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | centos:mail_c7:mta_5 [18.11.2024 19:12. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== TLS-Verbindungen, | ||
+ | {{: | ||
+ | Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen. | ||
+ | |||
+ | Inwieweit staatliche Stellen den Datenverkehr abhören, protokollieren und abgreifen und zu manipulieren bzw. zensieren versuchen, weiss | ||
+ | - keiner so genau und | ||
+ | - was mit den gewonnen Daten angestellt wird, wird sich niemand öffentlich sagen trauen. | ||
+ | |||
+ | Tja, das war Stand der Dinge vor 2013, denn was bisher in den Bereich der Spekulation fiel, | ||
+ | findet nun Bestätigung durch die Erkenntnisse des Whistleblowers Edward Snowden zu den Projekten PRISM aus den USA und TEMPORA aus England. | ||
+ | {{ : | ||
+ | |||
+ | Was lernen wir aus dieser Tatsache? Unsere Kommunikation ist nach besten Wissen und Gewissen, so zu gestalten, damit andere unsere Daten nicht mitlesen und manipulieren können. Ferner ist sicherzustellen, | ||
+ | |||
+ | Nicht nur auf [[centos: | ||
+ | |||
+ | Mit Hilfe von **[[centos: | ||
+ | |||
+ | Perfect Forward Secrecy (PFS) basiert auf der Idee, dass Client und Server ihre Kommunikation über einen zusätzlichen temporären Schlüssel absichern, der wechselt. Da der Verbindungsaufbau so gestrickt ist, dass der Schlüssel selbst gar nicht ausgetauscht werden muss, kann der jeweils benutzte Sitzungsschlüssel selbst auch nicht aufgezeichnet werden. Eine nachträgliche Entschlüsselung einer früher aufgezeichneten Session ist damit nicht mehr möglich. | ||
+ | |||
+ | Die für die Verschlüsselung notwendigen // | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== OpenSSL ===== | ||
+ | Bei der Standardinstallation unseres Systems wurde in der Regel bereits das Paket **openssl** installiert. Ein kurzer Blick in die RPMdatenbank schafft hierzu Gewissheit. | ||
+ | # yum list openssl | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Sollte das Paket noch fehlen, installieren wir dies einfach via: | ||
+ | # yum install openssl | ||
+ | Was uns das Paket **// | ||
+ | # rpm -qil openssl | ||
+ | < | ||
+ | Epoch : 1 | ||
+ | Version | ||
+ | Release | ||
+ | Architecture: | ||
+ | Install Date: Sat 18 Oct 2014 09:55:41 AM CEST | ||
+ | Group : System Environment/ | ||
+ | Size : 1610001 | ||
+ | License | ||
+ | Signature | ||
+ | Source RPM : openssl-1.0.1e-34.el7_0.6.src.rpm | ||
+ | Build Date : Thu 16 Oct 2014 05:42:42 PM CEST | ||
+ | Build Host : worker1.bsys.centos.org | ||
+ | Relocations : (not relocatable) | ||
+ | Packager | ||
+ | Vendor | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | Description : | ||
+ | The OpenSSL toolkit provides support for secure communications between | ||
+ | machines. OpenSSL includes a certificate management tool and shared | ||
+ | libraries which provide various cryptographic algorithms and | ||
+ | protocols. | ||
+ | /etc/pki/CA | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==== Cipher-Suites und Diffie-Hellmann ==== | ||
+ | Möchte man in Erfahrung bringen, welche Cipher-Suites((Sammlung von standardisierten kryptographischer Algorithmen)) (Chiffrensammlung) unser installiertes OpenSSL-Paket mitbringt, können wir wie folgt abfragen((Ausgabe in formatierter Tabelle)). | ||
+ | # openssl ciphers -v | ||
+ | < | ||
+ | ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH | ||
+ | ECDHE-RSA-AES256-SHA384 | ||
+ | ECDHE-ECDSA-AES256-SHA384 | ||
+ | ECDHE-RSA-AES256-SHA | ||
+ | ECDHE-ECDSA-AES256-SHA | ||
+ | DHE-DSS-AES256-GCM-SHA384 | ||
+ | DHE-RSA-AES256-GCM-SHA384 | ||
+ | DHE-RSA-AES256-SHA256 | ||
+ | DHE-DSS-AES256-SHA256 | ||
+ | DHE-RSA-AES256-SHA | ||
+ | DHE-DSS-AES256-SHA | ||
+ | DHE-RSA-CAMELLIA256-SHA | ||
+ | DHE-DSS-CAMELLIA256-SHA | ||
+ | ECDH-RSA-AES256-GCM-SHA384 | ||
+ | ECDH-ECDSA-AES256-GCM-SHA384 | ||
+ | ECDH-RSA-AES256-SHA384 | ||
+ | ECDH-ECDSA-AES256-SHA384 | ||
+ | ECDH-RSA-AES256-SHA | ||
+ | ECDH-ECDSA-AES256-SHA | ||
+ | AES256-GCM-SHA384 | ||
+ | AES256-SHA256 | ||
+ | AES256-SHA | ||
+ | CAMELLIA256-SHA | ||
+ | PSK-AES256-CBC-SHA | ||
+ | ECDHE-RSA-AES128-GCM-SHA256 | ||
+ | ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH | ||
+ | ECDHE-RSA-AES128-SHA256 | ||
+ | ECDHE-ECDSA-AES128-SHA256 | ||
+ | ECDHE-RSA-AES128-SHA | ||
+ | ECDHE-ECDSA-AES128-SHA | ||
+ | DHE-DSS-AES128-GCM-SHA256 | ||
+ | DHE-RSA-AES128-GCM-SHA256 | ||
+ | DHE-RSA-AES128-SHA256 | ||
+ | DHE-DSS-AES128-SHA256 | ||
+ | DHE-RSA-AES128-SHA | ||
+ | DHE-DSS-AES128-SHA | ||
+ | ECDHE-RSA-DES-CBC3-SHA | ||
+ | ECDHE-ECDSA-DES-CBC3-SHA | ||
+ | DHE-RSA-SEED-SHA | ||
+ | DHE-DSS-SEED-SHA | ||
+ | DHE-RSA-CAMELLIA128-SHA | ||
+ | DHE-DSS-CAMELLIA128-SHA | ||
+ | EDH-RSA-DES-CBC3-SHA | ||
+ | EDH-DSS-DES-CBC3-SHA | ||
+ | ECDH-RSA-AES128-GCM-SHA256 | ||
+ | ECDH-ECDSA-AES128-GCM-SHA256 | ||
+ | ECDH-RSA-AES128-SHA256 | ||
+ | ECDH-ECDSA-AES128-SHA256 | ||
+ | ECDH-RSA-AES128-SHA | ||
+ | ECDH-ECDSA-AES128-SHA | ||
+ | ECDH-RSA-DES-CBC3-SHA | ||
+ | ECDH-ECDSA-DES-CBC3-SHA | ||
+ | AES128-GCM-SHA256 | ||
+ | AES128-SHA256 | ||
+ | AES128-SHA | ||
+ | SEED-SHA | ||
+ | CAMELLIA128-SHA | ||
+ | DES-CBC3-SHA | ||
+ | IDEA-CBC-SHA | ||
+ | PSK-AES128-CBC-SHA | ||
+ | PSK-3DES-EDE-CBC-SHA | ||
+ | KRB5-IDEA-CBC-SHA | ||
+ | KRB5-DES-CBC3-SHA | ||
+ | KRB5-IDEA-CBC-MD5 | ||
+ | KRB5-DES-CBC3-MD5 | ||
+ | ECDHE-RSA-RC4-SHA | ||
+ | ECDHE-ECDSA-RC4-SHA | ||
+ | ECDH-RSA-RC4-SHA | ||
+ | ECDH-ECDSA-RC4-SHA | ||
+ | RC4-SHA | ||
+ | RC4-MD5 | ||
+ | PSK-RC4-SHA | ||
+ | KRB5-RC4-SHA | ||
+ | KRB5-RC4-MD5 | ||
+ | </ | ||
+ | |||
+ | Wir haben also mit der aktuellen Version von OpenSSL, den für //**Perfect Forward Secrecy**// benötigten kryptographischen Algorithmus **[[centos: | ||
+ | |||
+ | === Enhanced Diffie Hellman Keys === | ||
+ | Bei der [[centos: | ||
+ | |||
+ | # openssl dhparam -out / | ||
+ | < | ||
+ | This is going to take a long time | ||
+ | ......+...........+.......+.........................+......+.+........+.....+.........+......................................++*++*++*++*++*++* | ||
+ | </ | ||
+ | # openssl dhparam -out / | ||
+ | < | ||
+ | This is going to take a long time | ||
+ | ...............................+............+............................................................+........+.......+.................+.........................+........+......+.......+.........................................+...................+............................+...............................+...............+.............+.+.........+....+............+............+................................+.........+....+.+..+.................+......................................................+.............+.+..................+.............................................................................................................+......+........+.........................................................................................................................................................+...........+........................+..............+.................................+.......+........+................................+...............+..................+.........................................+..........................+............+..........................+..............................+............................+...+................+.....+.................+.++*++*++*++*++*++*</ | ||
+ | # openssl dhparam -out / | ||
+ | < | ||
+ | This is going to take a long time | ||
+ | ...........+..............................................................+.................+........................................................................................................................................................................................................................+...................................................................+..................................................................+...........................+....................................................................................................................+........+.................+.................................................................................................+...........+...................+.......................................................................................................+++...................................+....+................................................+.....................................+...............+.....+.............................+.+.........................+.........................+....................................+...................................................................................+..................+............+...............................+.........................................................................................+..............+.................................+.............+................................................................+.....+..............+.........+.............+..............................................+..............+................................++*++*++* | ||
+ | </ | ||
+ | |||
+ | Um nun nicht jeden Schlüssel einzeln generieren zu müssen, legen wir uns kurzer Hand einfach ein passendes Shell-Script an. Zuvor legen wir aber noch ein Verzeichnis an, in dem die Schlüssel vorübergehend abgelegt werden können. | ||
+ | # mkdir / | ||
+ | |||
+ | # vim edh_keygen | ||
+ | <file bash edh_keygen># | ||
+ | # Script zum Erstellen der Diffie Hellman Schlüssel | ||
+ | # Django < | ||
+ | cd / | ||
+ | umask 022 | ||
+ | openssl dhparam -out dh_512.pem 512 | ||
+ | openssl dhparam -out dh_1024.pem 1024 | ||
+ | openssl dhparam -out dh_2048.pem 2048 | ||
+ | openssl dhparam -out dh_4096.pem 4096 | ||
+ | chmod 640 dh_512.pem dh_1024.pem dh_2048.pem dh_4096.pem | ||
+ | / | ||
+ | rm *.pem -f | ||
+ | systemctl condrestart postfix</ | ||
+ | |||
+ | Damit das Script auch ausgeführt werden kann, versehen wir es noch mit den benötigten Rechten. | ||
+ | # chmod +x edh_keygen | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | Warum das ganze in ein Shellsript packen, wird nun sich der ein oder andere gefragt haben. Ganz einfach: Wenn wir das Script nun nach **/// | ||
+ | </ | ||
+ | # mv edh_keygen / | ||
+ | |||
+ | Zum Testen welche Schlüssel vom Server verwendet werden, können wir folgenden Befehl verwenden: | ||
+ | $ echo | openssl s_client -starttls smtp -connect smtp.nausch.org: | ||
+ | |||
+ | Als Antwort erhalten wie zwei Zeilen mit Angabe zu den Schlüssellängen. Die erste Zeile beschreibt den temporären Diffie Hellman, die zweite Zeile den RSA-Schlüssel des TLS-Zertifikats. | ||
+ | Server Temp Key: DH, 4096 bits | ||
+ | Server public key is 4096 bit | ||
+ | |||
+ | |||
+ | ===== Zertifikatserstellung ===== | ||
+ | Technisch gesehen unterscheiden sich Zertifikate einer " | ||
+ | |||
+ | Egal welchen Weg wir hier gehen können oder müssen, zur Absicherung unserer Kommunikation benötigen wir drei Dinge: | ||
+ | - unseren // | ||
+ | - unseren // | ||
+ | - den //Public Key// der unterschreibenden CA, um deren Unterschrift zu prüfen, auch als **Root-Zertifikat** bekannt. | ||
+ | |||
+ | Nutzt man ein kommerzielle CA können wir die nächsten [[centos: | ||
+ | |||
+ | === Scriptgesteuert erstellen === | ||
+ | Dem Paket //openssl// liegt zwar ein Bash-Script bei, mit dessen Hilfe die nachfolgenden Installationsschritte automatisiert ablaufen sollen, aber zum besseren Verständnis, | ||
+ | # cat / | ||
+ | <file bash / | ||
+ | # | ||
+ | # CA - wrapper around ca to make it easier to use ... basically ca requires | ||
+ | # some setup stuff to be done before you can use it and this makes | ||
+ | # things easier between now and when Eric is convinced to fix it :-) | ||
+ | # | ||
+ | # CA -newca ... will setup the right stuff | ||
+ | # CA -newreq ... will generate a certificate request | ||
+ | # CA -sign ... will sign the generated request and output | ||
+ | # | ||
+ | # At the end of that grab newreq.pem and newcert.pem (one has the key | ||
+ | # and the other the certificate) and cat them together and that is what | ||
+ | # you want/need ... I'll make even this a little cleaner later. | ||
+ | # | ||
+ | # | ||
+ | # 12-Jan-96 tjh Added more things ... including CA -signcert which | ||
+ | # converts a certificate to a request and then signs it. | ||
+ | # 10-Jan-96 eay Fixed a few more bugs and added the SSLEAY_CONFIG | ||
+ | # environment variable so this can be driven from | ||
+ | # a script. | ||
+ | # 25-Jul-96 eay Cleaned up filenames some more. | ||
+ | # 11-Jun-96 eay Fixed a few filename missmatches. | ||
+ | # 03-May-96 eay Modified to use ' | ||
+ | # 18-Apr-96 tjh Original hacking | ||
+ | # | ||
+ | # Tim Hudson | ||
+ | # tjh@cryptsoft.com | ||
+ | # | ||
+ | |||
+ | # default openssl.cnf file has setup as per the following | ||
+ | # demoCA ... where everything is stored | ||
+ | cp_pem() { | ||
+ | infile=$1 | ||
+ | outfile=$2 | ||
+ | bound=$3 | ||
+ | flag=0 | ||
+ | exec < | ||
+ | while read line; do | ||
+ | if [ $flag -eq 1 ]; then | ||
+ | echo $line|grep " | ||
+ | if [ $? -eq 0 ] ; then | ||
+ | echo $line >> | ||
+ | break | ||
+ | else | ||
+ | echo $line >> | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | echo $line|grep " | ||
+ | if [ $? -eq 0 ]; then | ||
+ | echo $line > | ||
+ | flag=1 | ||
+ | fi | ||
+ | done | ||
+ | } | ||
+ | |||
+ | usage() { | ||
+ | echo " | ||
+ | } | ||
+ | |||
+ | if [ -z " | ||
+ | |||
+ | if [ -z " | ||
+ | CADAYS=" | ||
+ | REQ=" | ||
+ | CA=" | ||
+ | VERIFY=" | ||
+ | X509=" | ||
+ | PKCS12=" | ||
+ | |||
+ | if [ -z " | ||
+ | CAKEY=./ | ||
+ | CAREQ=./ | ||
+ | CACERT=./ | ||
+ | |||
+ | RET=0 | ||
+ | |||
+ | while [ " | ||
+ | case $1 in | ||
+ | -\? | ||
+ | usage | ||
+ | exit 0 | ||
+ | ;; | ||
+ | -newcert) | ||
+ | # create a certificate | ||
+ | $REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS | ||
+ | RET=$? | ||
+ | echo " | ||
+ | ;; | ||
+ | -newreq) | ||
+ | # create a certificate request | ||
+ | $REQ -new -keyout newkey.pem -out newreq.pem $DAYS | ||
+ | RET=$? | ||
+ | echo " | ||
+ | ;; | ||
+ | -newreq-nodes) | ||
+ | # create a certificate request | ||
+ | $REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS | ||
+ | RET=$? | ||
+ | echo " | ||
+ | ;; | ||
+ | -newca) | ||
+ | # if explicitly asked for or it doesn' | ||
+ | # structure that Eric likes to manage things | ||
+ | NEW=" | ||
+ | if [ " | ||
+ | # create the directory hierarchy | ||
+ | mkdir -p ${CATOP} | ||
+ | mkdir -p ${CATOP}/ | ||
+ | mkdir -p ${CATOP}/ | ||
+ | mkdir -p ${CATOP}/ | ||
+ | mkdir -p ${CATOP}/ | ||
+ | touch ${CATOP}/ | ||
+ | fi | ||
+ | if [ ! -f ${CATOP}/ | ||
+ | echo "CA certificate filename (or enter to create)" | ||
+ | read FILE | ||
+ | |||
+ | # ask user for existing CA certificate | ||
+ | if [ " | ||
+ | cp_pem $FILE ${CATOP}/ | ||
+ | cp_pem $FILE ${CATOP}/ | ||
+ | RET=$? | ||
+ | if [ ! -f " | ||
+ | $X509 -in ${CATOP}/ | ||
+ | -out ${CATOP}/ | ||
+ | fi | ||
+ | else | ||
+ | echo " | ||
+ | $REQ -new -keyout ${CATOP}/ | ||
+ | -out ${CATOP}/ | ||
+ | $CA -create_serial -out ${CATOP}/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | RET=$? | ||
+ | fi | ||
+ | fi | ||
+ | ;; | ||
+ | -xsign) | ||
+ | $CA -policy policy_anything -infiles newreq.pem | ||
+ | RET=$? | ||
+ | ;; | ||
+ | -pkcs12) | ||
+ | if [ -z " | ||
+ | CNAME=" | ||
+ | else | ||
+ | CNAME=" | ||
+ | fi | ||
+ | $PKCS12 -in newcert.pem -inkey newreq.pem -certfile ${CATOP}/ | ||
+ | -out newcert.p12 -export -name " | ||
+ | RET=$? | ||
+ | exit $RET | ||
+ | ;; | ||
+ | -sign|-signreq) | ||
+ | $CA -policy policy_anything -out newcert.pem -infiles newreq.pem | ||
+ | RET=$? | ||
+ | cat newcert.pem | ||
+ | echo " | ||
+ | ;; | ||
+ | -signCA) | ||
+ | $CA -policy policy_anything -out newcert.pem -extensions v3_ca -infiles newreq.pem | ||
+ | RET=$? | ||
+ | echo " | ||
+ | ;; | ||
+ | -signcert) | ||
+ | echo "Cert passphrase will be requested twice - bug?" | ||
+ | $X509 -x509toreq -in newreq.pem -signkey newreq.pem -out tmp.pem | ||
+ | $CA -policy policy_anything -out newcert.pem -infiles tmp.pem | ||
+ | RET=$? | ||
+ | cat newcert.pem | ||
+ | echo " | ||
+ | ;; | ||
+ | -verify) | ||
+ | shift | ||
+ | if [ -z " | ||
+ | $VERIFY -CAfile $CATOP/ | ||
+ | RET=$? | ||
+ | else | ||
+ | for j | ||
+ | do | ||
+ | $VERIFY -CAfile $CATOP/ | ||
+ | if [ $? != 0 ]; then | ||
+ | RET=$? | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | exit $RET | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | usage | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | shift | ||
+ | done | ||
+ | exit $RET | ||
+ | </ | ||
+ | <WRAP center round tip> **__Wichtig__**: | ||
+ | Zum besseren Verständnis der Zertifikatsthematik, | ||
+ | |||
+ | === manuelle Erstellung unserer eigenen CA === | ||
+ | == fehlende Dateien anlegen == | ||
+ | Als erstes legen wir die noch fehlenden Dateien an. | ||
+ | # echo " | ||
+ | |||
+ | # touch / | ||
+ | |||
+ | Somit befindet sich in unserem Pfad **/ | ||
+ | # ll /etc/pki/CA | ||
+ | < | ||
+ | drwxr-xr-x 2 root root 6 Jun 24 14:57 certs | ||
+ | drwxr-xr-x 2 root root 6 Jun 24 14:57 crl | ||
+ | -rw-r--r-- 1 root root 0 Jul 23 14:03 index.txt | ||
+ | drwxr-xr-x 2 root root 6 Jun 24 14:57 newcerts | ||
+ | drwx------ 2 root root 6 Jun 24 14:57 private | ||
+ | -rw-r--r-- 1 root root 3 Jul 23 14:03 serial | ||
+ | </ | ||
+ | |||
+ | == CA-Erstellung mit Hilfe von openssl == | ||
+ | Die Gültigkeit setzen wir mit 25 Jahren bewusst sehr hoch an. Nach dem Ablauf der Gültigkeit der CA werden nämlich auch alle damit signierten Serverzertifikate ungültig! Bei der nun folgenden Generierung unserer CA wird automatisch ein Schlüssel (//private key//), mit einer Länge von 2048 Bit, erzeugt und in der Datei **// | ||
+ | |||
+ | Zur Sicherheit schützen wir den //private key// unserer CA mit einer Passphrase! Denn wer den geheimen Schlüssel der CA hat/kennt, könnte damit beliebige Serverzertifikate signieren. Daher legen wir dieses Keyfile nicht im Klartext auf der Festplatte ab, sondern mit einer Passphrase verschlüsselt. Diese Passphrase benötigen wir immer dann, wenn wir mit unser eigenen CA neue Zertifikate ausstellen wollen. Im nachfolgenden Dialog akzetieren wir die Vorgaben in eckigen Klammern, geben unsere individuellen Daten an, oder quittieren ein //leeres Feld// mittels eines **Punktes** **.**. Beim Feld Common Name (CN) geben wir den Domain-Namen unserer Zertifizierungsstelle ein. | ||
+ | |||
+ | Diese Daten werden dem Client angezeigt, sobald dieser aufgefordert wird, das Zertifikat zu akzeptieren oder abzulehnen. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die Eingaben sind in der Farbe < | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | ..................................................++ | ||
+ | ....................++ | ||
+ | writing new private key to ' | ||
+ | Enter PEM pass phrase: </ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | You are about to be asked to enter information that will be incorporated | ||
+ | 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=" | ||
+ | </ | ||
+ | |||
+ | Als Ergebnis erhalten wir zwei Dateien: | ||
+ | * **cakey.pem** den //private key// unserer //CA// und | ||
+ | * **cacert.pem** das CA-Certifikat unserer //CA//. | ||
+ | |||
+ | # ll *.pem | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Sicherheitshalber ändern wir die Rechte so, dass die Schlüsseldateien nur für root lesbar sind: | ||
+ | # chmod 400 *.pem | ||
+ | Bei Bedarf kann man mit **openssl rsa -in < | ||
+ | # openssl rsa -in cakey.pem -noout -text | ||
+ | < | ||
+ | Private-Key: | ||
+ | modulus: | ||
+ | 00: | ||
+ | f5: | ||
+ | 78: | ||
+ | f1: | ||
+ | 4a: | ||
+ | 04: | ||
+ | d8: | ||
+ | d9: | ||
+ | 98: | ||
+ | 67: | ||
+ | 91: | ||
+ | 23: | ||
+ | 8e: | ||
+ | 10: | ||
+ | 46: | ||
+ | f9: | ||
+ | 9d: | ||
+ | 04: | ||
+ | 79: | ||
+ | 21: | ||
+ | dd: | ||
+ | f5: | ||
+ | aa: | ||
+ | 4f: | ||
+ | 22: | ||
+ | fd: | ||
+ | 81: | ||
+ | 4e: | ||
+ | 0c: | ||
+ | 80: | ||
+ | e6: | ||
+ | 4e: | ||
+ | 46: | ||
+ | ce: | ||
+ | f9:25:eb | ||
+ | publicExponent: | ||
+ | privateExponent: | ||
+ | 45: | ||
+ | 7c: | ||
+ | b4: | ||
+ | 5b: | ||
+ | 71: | ||
+ | 59: | ||
+ | 08: | ||
+ | e3: | ||
+ | 5f: | ||
+ | ae: | ||
+ | 65: | ||
+ | 5a: | ||
+ | 84: | ||
+ | e0: | ||
+ | ad: | ||
+ | 3e: | ||
+ | 46: | ||
+ | d9: | ||
+ | 3b: | ||
+ | b5: | ||
+ | bd: | ||
+ | c0: | ||
+ | bc: | ||
+ | f7: | ||
+ | fa: | ||
+ | 1e: | ||
+ | 1c: | ||
+ | b5: | ||
+ | a7: | ||
+ | 3e: | ||
+ | c6: | ||
+ | c4: | ||
+ | 02: | ||
+ | d7: | ||
+ | 6d:a1 | ||
+ | prime1: | ||
+ | 00: | ||
+ | 5b: | ||
+ | 0e: | ||
+ | 02: | ||
+ | 3e: | ||
+ | d0: | ||
+ | 03: | ||
+ | 70: | ||
+ | 3a: | ||
+ | e5: | ||
+ | 8f: | ||
+ | 61: | ||
+ | 12: | ||
+ | cc: | ||
+ | c6: | ||
+ | 2c: | ||
+ | d3: | ||
+ | b6:37 | ||
+ | prime2: | ||
+ | 00: | ||
+ | 15: | ||
+ | d8: | ||
+ | 34: | ||
+ | 73: | ||
+ | f7: | ||
+ | 7e: | ||
+ | ab: | ||
+ | 29: | ||
+ | e4: | ||
+ | 2d: | ||
+ | b6: | ||
+ | 63: | ||
+ | 45: | ||
+ | 06: | ||
+ | 2d: | ||
+ | 44: | ||
+ | b3:ed | ||
+ | exponent1: | ||
+ | 69: | ||
+ | e2: | ||
+ | 64: | ||
+ | ce: | ||
+ | 89: | ||
+ | c5: | ||
+ | b2: | ||
+ | 12: | ||
+ | 36: | ||
+ | 3c: | ||
+ | 09: | ||
+ | a5: | ||
+ | 84: | ||
+ | 76: | ||
+ | aa: | ||
+ | 9b: | ||
+ | f2: | ||
+ | 99 | ||
+ | exponent2: | ||
+ | 0f: | ||
+ | 50: | ||
+ | d8: | ||
+ | 1c: | ||
+ | 3d: | ||
+ | ab: | ||
+ | cd: | ||
+ | 6a: | ||
+ | 1f: | ||
+ | 0e: | ||
+ | d9: | ||
+ | 01: | ||
+ | f5: | ||
+ | f9: | ||
+ | b9: | ||
+ | 82: | ||
+ | 74: | ||
+ | f1 | ||
+ | coefficient: | ||
+ | 00: | ||
+ | 5b: | ||
+ | df: | ||
+ | 72: | ||
+ | 0e: | ||
+ | 76: | ||
+ | 31: | ||
+ | 36: | ||
+ | c3: | ||
+ | 01: | ||
+ | fb: | ||
+ | 03: | ||
+ | 3d: | ||
+ | 46: | ||
+ | b5: | ||
+ | 6a: | ||
+ | 6e: | ||
+ | 82:f5 | ||
+ | </ | ||
+ | |||
+ | Will man die Passphrase eines Schlüssels entfernen, geht man wie folgt vor: | ||
+ | |||
+ | < | ||
+ | <font style=" | ||
+ | </ | ||
+ | < | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | </ | ||
+ | |||
+ | Auch hier sind die Eingaben sind in der Farbe < | ||
+ | |||
+ | == Laufzeit der Zertifikate anpassen == | ||
+ | Da wir die Laufzeit der erzeugten Zertifikate nicht auf der Kommandozeile beim Aufruf von **openssl** angeben können, passen wir in der OpenSSL-Konfigurationsdatei die Laufzeit **default_days** an. | ||
+ | |||
+ | # vim / | ||
+ | <file bash / | ||
+ | # OpenSSL example configuration file. | ||
+ | # This is mostly being used for generation of certificate requests. | ||
+ | # | ||
+ | |||
+ | # This definition stops the following lines choking if HOME isn't | ||
+ | # defined. | ||
+ | HOME = . | ||
+ | RANDFILE = $ENV:: | ||
+ | |||
+ | # Extra OBJECT IDENTIFIER info: | ||
+ | # | ||
+ | oid_section = new_oids | ||
+ | |||
+ | # To use this configuration file with the " | ||
+ | # " | ||
+ | # X.509v3 extensions to use: | ||
+ | # extensions = | ||
+ | # (Alternatively, | ||
+ | # X.509v3 extensions in its main [= default] section.) | ||
+ | |||
+ | [ new_oids ] | ||
+ | |||
+ | # We can add new OIDs in here for use by ' | ||
+ | # Add a simple OID like this: | ||
+ | # testoid1=1.2.3.4 | ||
+ | # Or use config file substitution like this: | ||
+ | # testoid2=${testoid1}.5.6 | ||
+ | |||
+ | # Policies used by the TSA examples. | ||
+ | tsa_policy1 = 1.2.3.4.1 | ||
+ | tsa_policy2 = 1.2.3.4.5.6 | ||
+ | tsa_policy3 = 1.2.3.4.5.7 | ||
+ | |||
+ | #################################################################### | ||
+ | [ ca ] | ||
+ | default_ca = CA_default # | ||
+ | |||
+ | #################################################################### | ||
+ | [ CA_default ] | ||
+ | |||
+ | dir = / | ||
+ | certs = $dir/ | ||
+ | crl_dir = $dir/crl # Where the issued crl are kept | ||
+ | database = $dir/ | ||
+ | # | ||
+ | # several ctificates with same subject. | ||
+ | new_certs_dir = $dir/ | ||
+ | |||
+ | certificate = $dir/ | ||
+ | serial = $dir/serial # The current serial number | ||
+ | crlnumber = $dir/ | ||
+ | # must be commented out to leave a V1 CRL | ||
+ | crl = $dir/ | ||
+ | private_key = $dir/ | ||
+ | RANDFILE = $dir/ | ||
+ | |||
+ | x509_extensions = usr_cert # The extentions to add to the cert | ||
+ | |||
+ | # Comment out the following two lines for the " | ||
+ | # (and highly broken) format. | ||
+ | name_opt = ca_default # | ||
+ | cert_opt = ca_default # | ||
+ | |||
+ | # Extension copying option: use with caution. | ||
+ | # copy_extensions = copy | ||
+ | |||
+ | # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs | ||
+ | # so this is commented out by default to leave a V1 CRL. | ||
+ | # crlnumber must also be commented out to leave a V1 CRL. | ||
+ | # crl_extensions = crl_ext | ||
+ | |||
+ | # Django : 2014-07-23 | ||
+ | # default: default_days | ||
+ | default_days = 730 # how long to certify for (two years) | ||
+ | default_crl_days= 30 # how long before next CRL | ||
+ | default_md = sha256 # use SHA-256 by default | ||
+ | preserve = no # keep passed DN ordering | ||
+ | |||
+ | # A few difference way of specifying how similar the request should look | ||
+ | # For type CA, the listed attributes must be the same, and the optional | ||
+ | # and supplied fields are just that :-) | ||
+ | policy = policy_match | ||
+ | |||
+ | # For the CA policy | ||
+ | [ policy_match ] | ||
+ | countryName = match | ||
+ | stateOrProvinceName = match | ||
+ | organizationName = match | ||
+ | organizationalUnitName = optional | ||
+ | commonName = supplied | ||
+ | emailAddress = optional | ||
+ | |||
+ | # For the ' | ||
+ | # At this point in time, you must list all acceptable ' | ||
+ | # types. | ||
+ | [ policy_anything ] | ||
+ | countryName = optional | ||
+ | stateOrProvinceName = optional | ||
+ | localityName = optional | ||
+ | organizationName = optional | ||
+ | organizationalUnitName = optional | ||
+ | commonName = supplied | ||
+ | emailAddress = optional | ||
+ | |||
+ | #################################################################### | ||
+ | [ req ] | ||
+ | default_bits = 2048 | ||
+ | default_md = sha256 | ||
+ | default_keyfile = privkey.pem | ||
+ | distinguished_name = req_distinguished_name | ||
+ | attributes = req_attributes | ||
+ | x509_extensions = v3_ca # The extentions to add to the self signed cert | ||
+ | |||
+ | # Passwords for private keys if not present they will be prompted for | ||
+ | # input_password = secret | ||
+ | # output_password = secret | ||
+ | |||
+ | # This sets a mask for permitted string types. There are several options. | ||
+ | # default: PrintableString, | ||
+ | # pkix : PrintableString, | ||
+ | # utf8only: only UTF8Strings (PKIX recommendation after 2004). | ||
+ | # nombstr : PrintableString, | ||
+ | # MASK:XXXX a literal mask value. | ||
+ | # WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. | ||
+ | string_mask = utf8only | ||
+ | |||
+ | # req_extensions = v3_req # The extensions to add to a certificate request | ||
+ | |||
+ | [ req_distinguished_name ] | ||
+ | countryName = Country Name (2 letter code) | ||
+ | countryName_default = XX | ||
+ | countryName_min = 2 | ||
+ | countryName_max = 2 | ||
+ | |||
+ | stateOrProvinceName = State or Province Name (full name) | ||
+ | # | ||
+ | |||
+ | localityName = Locality Name (eg, city) | ||
+ | localityName_default = Default City | ||
+ | |||
+ | 0.organizationName = Organization Name (eg, company) | ||
+ | 0.organizationName_default = Default Company Ltd | ||
+ | |||
+ | # we can do this but it is not needed normally :-) | ||
+ | # | ||
+ | # | ||
+ | |||
+ | organizationalUnitName = Organizational Unit Name (eg, section) | ||
+ | # | ||
+ | |||
+ | commonName = Common Name (eg, your name or your server\' | ||
+ | commonName_max = 64 | ||
+ | |||
+ | emailAddress = Email Address | ||
+ | emailAddress_max = 64 | ||
+ | |||
+ | # SET-ex3 = SET extension number 3 | ||
+ | |||
+ | [ req_attributes ] | ||
+ | challengePassword = A challenge password | ||
+ | challengePassword_min = 4 | ||
+ | challengePassword_max = 20 | ||
+ | |||
+ | unstructuredName = An optional company name | ||
+ | |||
+ | [ usr_cert ] | ||
+ | |||
+ | # These extensions are added when ' | ||
+ | |||
+ | # This goes against PKIX guidelines but some CAs do it and some software | ||
+ | # requires this to avoid interpreting an end user certificate as a CA. | ||
+ | |||
+ | basicConstraints=CA: | ||
+ | |||
+ | # Here are some examples of the usage of nsCertType. If it is omitted | ||
+ | # the certificate can be used for anything *except* object signing. | ||
+ | |||
+ | # This is OK for an SSL server. | ||
+ | # nsCertType = server | ||
+ | |||
+ | # For an object signing certificate this would be used. | ||
+ | # nsCertType = objsign | ||
+ | |||
+ | # For normal client use this is typical | ||
+ | # nsCertType = client, email | ||
+ | |||
+ | # and for everything including object signing: | ||
+ | # nsCertType = client, email, objsign | ||
+ | |||
+ | # This is typical in keyUsage for a client certificate. | ||
+ | # keyUsage = nonRepudiation, | ||
+ | |||
+ | # This will be displayed in Netscape' | ||
+ | nsComment = " | ||
+ | |||
+ | # PKIX recommendations harmless if included in all certificates. | ||
+ | subjectKeyIdentifier=hash | ||
+ | authorityKeyIdentifier=keyid, | ||
+ | |||
+ | # This stuff is for subjectAltName and issuerAltname. | ||
+ | # Import the email address. | ||
+ | # subjectAltName=email: | ||
+ | # An alternative to produce certificates that aren't | ||
+ | # deprecated according to PKIX. | ||
+ | # subjectAltName=email: | ||
+ | |||
+ | # Copy subject details | ||
+ | # issuerAltName=issuer: | ||
+ | |||
+ | # | ||
+ | #nsBaseUrl | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # This is required for TSA certificates. | ||
+ | # extendedKeyUsage = critical, | ||
+ | |||
+ | [ v3_req ] | ||
+ | |||
+ | # Extensions to add to a certificate request | ||
+ | |||
+ | basicConstraints = CA:FALSE | ||
+ | keyUsage = nonRepudiation, | ||
+ | |||
+ | [ v3_ca ] | ||
+ | |||
+ | |||
+ | # Extensions for a typical CA | ||
+ | |||
+ | |||
+ | # PKIX recommendation. | ||
+ | |||
+ | subjectKeyIdentifier=hash | ||
+ | |||
+ | authorityKeyIdentifier=keyid: | ||
+ | |||
+ | # This is what PKIX recommends but some broken software chokes on critical | ||
+ | # extensions. | ||
+ | # | ||
+ | # So we do this instead. | ||
+ | basicConstraints = CA:true | ||
+ | |||
+ | # Key usage: this is typical for a CA certificate. However since it will | ||
+ | # prevent it being used as an test self-signed certificate it is best | ||
+ | # left out by default. | ||
+ | # keyUsage = cRLSign, keyCertSign | ||
+ | |||
+ | # Some might want this also | ||
+ | # nsCertType = sslCA, emailCA | ||
+ | |||
+ | # Include email address in subject alt name: another PKIX recommendation | ||
+ | # subjectAltName=email: | ||
+ | # Copy issuer details | ||
+ | # issuerAltName=issuer: | ||
+ | |||
+ | # DER hex encoding of an extension: beware experts only! | ||
+ | # obj=DER: | ||
+ | # Where ' | ||
+ | # You can even override a supported extension: | ||
+ | # basicConstraints= critical, DER: | ||
+ | |||
+ | [ crl_ext ] | ||
+ | |||
+ | # CRL extensions. | ||
+ | # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. | ||
+ | |||
+ | # issuerAltName=issuer: | ||
+ | authorityKeyIdentifier=keyid: | ||
+ | |||
+ | [ proxy_cert_ext ] | ||
+ | # These extensions should be added when creating a proxy certificate | ||
+ | |||
+ | # This goes against PKIX guidelines but some CAs do it and some software | ||
+ | # requires this to avoid interpreting an end user certificate as a CA. | ||
+ | |||
+ | basicConstraints=CA: | ||
+ | |||
+ | # Here are some examples of the usage of nsCertType. If it is omitted | ||
+ | # the certificate can be used for anything *except* object signing. | ||
+ | |||
+ | # This is OK for an SSL server. | ||
+ | # nsCertType = server | ||
+ | |||
+ | # For an object signing certificate this would be used. | ||
+ | # nsCertType = objsign | ||
+ | |||
+ | # For normal client use this is typical | ||
+ | # nsCertType = client, email | ||
+ | |||
+ | # and for everything including object signing: | ||
+ | # nsCertType = client, email, objsign | ||
+ | |||
+ | # This is typical in keyUsage for a client certificate. | ||
+ | # keyUsage = nonRepudiation, | ||
+ | |||
+ | # This will be displayed in Netscape' | ||
+ | nsComment = " | ||
+ | |||
+ | # PKIX recommendations harmless if included in all certificates. | ||
+ | subjectKeyIdentifier=hash | ||
+ | authorityKeyIdentifier=keyid, | ||
+ | |||
+ | # This stuff is for subjectAltName and issuerAltname. | ||
+ | # Import the email address. | ||
+ | # subjectAltName=email: | ||
+ | # An alternative to produce certificates that aren't | ||
+ | # deprecated according to PKIX. | ||
+ | # subjectAltName=email: | ||
+ | |||
+ | # Copy subject details | ||
+ | # issuerAltName=issuer: | ||
+ | |||
+ | # | ||
+ | #nsBaseUrl | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # This really needs to be in place for it to be a proxy certificate. | ||
+ | proxyCertInfo=critical, | ||
+ | |||
+ | #################################################################### | ||
+ | [ tsa ] | ||
+ | |||
+ | default_tsa = tsa_config1 # | ||
+ | |||
+ | [ tsa_config1 ] | ||
+ | |||
+ | # These are used by the TSA reply generation only. | ||
+ | dir = ./demoCA # TSA root directory | ||
+ | serial = $dir/ | ||
+ | crypto_device = builtin # OpenSSL engine to use for signing | ||
+ | signer_cert = $dir/ | ||
+ | # (optional) | ||
+ | certs = $dir/ | ||
+ | # (optional) | ||
+ | signer_key = $dir/ | ||
+ | |||
+ | default_policy = tsa_policy1 # | ||
+ | # (optional) | ||
+ | other_policies = tsa_policy2, | ||
+ | digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) | ||
+ | accuracy = secs:1, millisecs: | ||
+ | clock_precision_digits | ||
+ | ordering = yes # Is ordering defined for timestamps? | ||
+ | # (optional, default: no) | ||
+ | tsa_name = yes # Must the TSA name be included in the reply? | ||
+ | # (optional, default: no) | ||
+ | ess_cert_id_chain = no # Must the ESS cert id chain be included? | ||
+ | # (optional, default: no) | ||
+ | </ | ||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | 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**((**C**ertificate **S**igning **R**equest)), | ||
+ | |||
+ | 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 | ||
+ | < | ||
+ | MIIC4TCCAckCAQAwgZsxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAP | ||
+ | BgNVBAcMCFBsaWVuaW5nMRMwEQYDVQQKDApuYXVzY2gub3JnMRMwEQYDVQQLDApQ | ||
+ | b3N0b2ZmaWNlMRgwFgYDVQQDDA9teDAxLm5hdXNjaC5vcmcxJDAiBgkqhkiG9w0B | ||
+ | CQEWFXBvc3RtYXN0ZXJAbmF1c2NoLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEP | ||
+ | ADCCAQoCggEBANGHFR6fvj33ISUmvZw4g92Di78T3euAXDcOF+VpXnivwbegDVT5 | ||
+ | utTtc2mdFUD5AeTVpdOdE7AZfjqaXFpwo5A8TRT11cxEWtZ+cJw4KBSqSNi9B2K/ | ||
+ | ApQ4mp8l95/ | ||
+ | tWxqd+HZs3pYqDPC+Y9q6ul6UDV/ | ||
+ | oSO5Mw2f9+ww44U7QsbZPrxZz2AVFrR2zUtcVu7A7GLWL90tFYMWEZm2mWkc4GVg | ||
+ | GTCcRrCmwdL6dBURzZ3sIUIFavYwJJAtBC8CAwEAAaAAMA0GCSqGSIb3DQEBCwUA | ||
+ | A4IBAQCY7ZrJ6i/ | ||
+ | xc2iMdoH8rElmc1cC7nk6vV61mF3Fxx20+ItXVdciSGPGqOlh+kiKbGbjtJCC+r+ | ||
+ | 0Xa1HvRnoHGHPA3ZOCBvxutNS4JC6OmaSLOkGMU1p5aSryyrpPEWg921Qt47YaEz | ||
+ | cirOHxaeH5aQ/ | ||
+ | J// | ||
+ | 01quu+iQHkbA00jyDB0SL4tIlQSD | ||
+ | -----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: (2048 bit) | ||
+ | Modulus: | ||
+ | 00: | ||
+ | 83: | ||
+ | 5e: | ||
+ | 15: | ||
+ | 5c: | ||
+ | 70: | ||
+ | 9a: | ||
+ | 66: | ||
+ | 57: | ||
+ | b5: | ||
+ | ea: | ||
+ | c1: | ||
+ | 3d: | ||
+ | 42: | ||
+ | 56: | ||
+ | 99: | ||
+ | 74: | ||
+ | 04:2f | ||
+ | Exponent: 65537 (0x10001) | ||
+ | Attributes: | ||
+ | a0:00 | ||
+ | Signature Algorithm: sha256WithRSAEncryption | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Diesen CSR kippen wir nun entweder bei der hauseigenen CA ein oder entsprechend bei einer kommerziellen CA. | ||
+ | ==== 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 | ||
+ | Certificate Details: | ||
+ | Serial Number: 0 (0x0) | ||
+ | Validity | ||
+ | Not Before: Oct 19 13:23:33 2014 GMT | ||
+ | Not After : Jul 22 13:23:33 2016 GMT | ||
+ | Subject: | ||
+ | countryName | ||
+ | stateOrProvinceName | ||
+ | organizationName | ||
+ | organizationalUnitName | ||
+ | commonName | ||
+ | emailAddress | ||
+ | X509v3 extensions: | ||
+ | X509v3 Basic Constraints: | ||
+ | CA:FALSE | ||
+ | Netscape Comment: | ||
+ | OpenSSL Generated Certificate | ||
+ | X509v3 Subject Key Identifier: | ||
+ | 43: | ||
+ | X509v3 Authority Key Identifier: | ||
+ | keyid: | ||
+ | |||
+ | Certificate is to be certified until Oct 19 13:23:33 2016 GMT (730 days) | ||
+ | Sign the certificate? | ||
+ | <font style=" | ||
+ | |||
+ | 1 out of 1 certificate requests certified, commit? [y/ | ||
+ | <font style=" | ||
+ | Data Base Updated</ | ||
+ | </ | ||
+ | |||
+ | ==== Speicherort ==== | ||
+ | Bei der Installation von Postfix wurden noch keine speziellen Ordner im Verzeichnis **/ | ||
+ | # mkdir -p / | ||
+ | |||
+ | |||
+ | < | ||
+ | ├── certs | ||
+ | └── private | ||
+ | </ | ||
+ | |||
+ | Anschließend legen wir dort die drei benötigten Dateien ab: | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | Die Dateinamen passen wir natürlich den lokalen Gegebenheiten nach an! | ||
+ | </ | ||
+ | |||
+ | |||
+ | - unseren // | ||
+ | - unseren // | ||
+ | - das // | ||
+ | - und schützen diese Dateien mit den Dateirechten **400**: < | ||
+ | # chmod 400 / | ||
+ | |||
+ | |||
+ | |||
+ | ===== CA Trust ===== | ||
+ | {{page> | ||
+ | |||
+ | {{page> | ||
+ | ===== Postfix konfigurieren ===== | ||
+ | Die Konfiguration der TLS-Optionen erfolgt in der Hauptkonfigurationsdatei // | ||
+ | ==== Zertifikate und Key(s) ==== | ||
+ | Postfix kennt grundsätzlich zwei verschiedene Transportrichtungen bei der Verarbeitung von eMails: | ||
+ | |||
+ | * **ankommend: | ||
+ | * **abgehend: | ||
+ | |||
+ | In aller Regel werden wir unseren SMTP-Daemon mit einem Zertifikat für die TLS-Transportverschlüsselung ausstatten. Aber auch der SMTP-Client kann mit Zertifikat und zugehörigen Schlüssel ausgestattet werden, wenn z.B. der empfangene SMTP-Server unseres Kommunikationspartners an Hand unseres Clientzertifikats überprüfen will/muss ob es sich um einen legitimen Sender handelt. | ||
+ | |||
+ | |||
+ | === SMTP-Daemon (Empfang von eMails) === | ||
+ | Zunächst definieren wir unseren SMTP-Daemon, | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | - **[[centos: | ||
+ | |||
+ | Diese drei Teilen weisen wir nun den zugehörigen Postfixparametern **smtpd_tls_key_file**, | ||
+ | - **[[centos: | ||
+ | MIIJKQIBAAKCAgEA148Cwr3Z9vK9I2uc1iYZK9hbcRoqR/ | ||
+ | q9tpf43ypjKpZBCL+OE3SCrG3W6/ | ||
+ | FhRUpLk1eXjAShxGpyH6Xrb9xK7tishirSHuCIhXhtjSzNZQeMg+8yfbrQpzRK/ | ||
+ | vxonHNX1EWC0DS54+5UUT6Eb6Q8kK545+8/ | ||
+ | gfIhFwnfsyh+9trp5WTeVFu40mzs7WZRHATbrwFZqJ4F/ | ||
+ | H74Mm4xyU8IkU8R1lh1TVGyeUarMRef9xuCjxioqwbw6kHcjfkmY4OI+XlAO7BIJ | ||
+ | EVe2RVocvjqIAeQpFr3pOXCg390/ | ||
+ | oBmpvc7tswRVp501ZCPgOv5dkFbPyM+brUF3QZHv6mHAgleTQnUaTRGfBfcEzki/ | ||
+ | TCtZlf66IBEFI7o4I3weD+u+DRfVy5S2mAXwCqL9QTyqf/ | ||
+ | r3m1EID4UpusuSdZ2oqFWztU+ZnKQDRhqjNH1YhEZJu66og4X3hzjL2y8OkCAwEA | ||
+ | AQKCAgEAoKt/ | ||
+ | +PoybwaC8WaI4GKEMh0wk1ehk5swPhqPaJ3vWM1r7O17Jbfh0zSIsBPxjkuYIjRa | ||
+ | xhiC/ | ||
+ | 7dncciELZK5F4W1CT+UXN9fO/ | ||
+ | rKFI835NPTDMl+H9XMUlb8GbdJ9iLPbnOI5AioSWe9YciN5h6ZjKz4atdBNXKMX6 | ||
+ | UJ8Bq9xWdN6vfW90npwEKZuXH2xblYHTip+BQD2yDDtGLRFPv70/ | ||
+ | D0ycFMD10sYo2tg69QHCwzdzgj6l/ | ||
+ | vjMSmpcoCinDpQKGGUwpc65C5hWj7H3WO13fZGzIl33BBK9B0DG1GdJSAIlTh9hy | ||
+ | cu0llaQ0bVWniXj42QeojGbUmAbB67rzgpN+rAfJilWNuNx0sEyyvDcjI04dJ9pN | ||
+ | zWDpQKGGUwpc65C5hW91z2F1ckD1cHd0Ch53l6571n5Kn13UJ0oUCggEBAP/ | ||
+ | BiUpOphahwy7fz5mFWGCnpz5fmUpfNjzJlI+ibqggT7geRbiR8iZUp4+AW+W8u8L | ||
+ | YnpWDErK8cQ+U08mLb3NBTHZETvwsmiAYdHoL/ | ||
+ | uQZoYiFSbqfkj+Jcvu9ljrJTkpIoVsLp68040hdF9EbAIEMrPY8o9Dz6/ | ||
+ | dzNHGyFBx62xyaDTMk20fLrPMqF/ | ||
+ | 9FlcVMhNEHSizmEvhAnK7vdHPFcvkfQVbK3f8ZCy7B76OmY6lPtkb3MJRGyVuP2B | ||
+ | ljb+IGsa3/ | ||
+ | sJSB7KswFImUqNHSZ4NoDG+KtE+lYHAkMQMOhG9/ | ||
+ | e83S0uVn/ | ||
+ | mxh5REItS1amoBRdt2fjzJIhRbIdlRBjYPJQl6BWk07AIt4D52XphpuLrmCMUbSY | ||
+ | oTvS/ | ||
+ | 0LQXUYKXBfw6cKh98wUV5Yoo/ | ||
+ | wesQjmKoqzMuvnADXM8b1MWYiWjxAQp/ | ||
+ | An4wt4bn6g4JMQAFQTGYYMac7wu5q1/ | ||
+ | Dvd+Al7Zauo6tf68eGWK2QE08gRQUGwbhC9XkkxVqz0jJv09nGBEZRflI5AmGUAb | ||
+ | DAzKlDB5OnjC1kSSqhmrLDowxoeNdmJzmUStALAIDa7ywyrnFsfGBEpTRecAn4d8 | ||
+ | hL8GkJnaCvLkgbt2FxbJfPHFrT3XmoMv+uVnET/ | ||
+ | fcW8UQKCAQEAtZCLLcKwYIbzFyRRqt8Q7V4WjAivy8fMbOC4oSDIPM/ | ||
+ | XRANkJ4ilo5reS8sWaV/ | ||
+ | GCEb63Q4C1FNdekEsNP51BorCMIB/ | ||
+ | JZwWPU4sY3tv4seynBseLq8XGJ4RIdn9H1nFf02V5UfMDvxhB87TrsiRXYNX4U58 | ||
+ | xkj28BC7WM1lEudX9k0+n/ | ||
+ | 7exaiteIR42IqOOdTefY5oO7tLg7cZqYtQKCAQA4Fpbl/ | ||
+ | o5xBcruthSFRVT+gbtB3HSa0ImW69YofutC1FNdekEsNP51BorCMIBtcXaGFHXx3 | ||
+ | 1aTxVTN1bWtcqzeV9zLvxQ39FWRZczKQzf2eSEQcO3MQJu3X+F1dbcpuWKHOg6S9 | ||
+ | QKgUAh7HeTb9A+/ | ||
+ | wm+bdTNKhHvZ7tepw8wwD321Iv82me7afNMjlV2OLy0OZ5jjXLJIXcV1QTIikIUm | ||
+ | MeXU1e4o7RXZ6IjxvjPObtcEJYy0etm3AkKo+Ql/ | ||
+ | -----END RSA PRIVATE KEY-----</ | ||
+ | - **[[centos: | ||
+ | MIIFoDCCBIigAwIBAgICKRAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVVMx | ||
+ | FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlkU1NMIFNIQTI1 | ||
+ | NiBDQSAtIEc0MB4XDTE1MTAxNDIyMjA1M1oXDTE3MTAxNTE2MDkxMVowgZMxEzAR | ||
+ | BgNVBAsTCkdUMjI2Njc5NDExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29t | ||
+ | L3Jlc291cmNlcy9jcHMgKGMpMTUxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZh | ||
+ | bGlkYXRlZCAtIFJhcGlkU1NMKFIpMRgwFgYDVQQDEw9teDAxLm5hdXNjaC5vcmcw | ||
+ | ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXjwLCvdn28r0ja5zWJhkr | ||
+ | 2FtxGipH/ | ||
+ | M5No3fONVr3cFoj/ | ||
+ | aUiqFsPWw++O/ | ||
+ | iFeG2NLM1lB4yD7zJ9utCnNEr/ | ||
+ | lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv | ||
+ | AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/ | ||
+ | KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir | ||
+ | 0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/ | ||
+ | ke/ | ||
+ | ov1BPKp/ | ||
+ | iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ | ||
+ | sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw | ||
+ | Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t | ||
+ | L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG | ||
+ | AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg | ||
+ | HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG | ||
+ | A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh | ||
+ | cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6 | ||
+ | k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn | ||
+ | X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep | ||
+ | A0pY4peiKrrCDGvW6/ | ||
+ | Md2v5ayCTGAt8S5ITz/ | ||
+ | eVH+n// | ||
+ | x5L03w== | ||
+ | -----END CERTIFICATE-----</ | ||
+ | - **[[centos: | ||
+ | issuer= / | ||
+ | notBefore=Oct 14 22:20:53 2015 GMT | ||
+ | notAfter=Oct 15 16:09:11 2017 GMT</ | ||
+ | issuer= / | ||
+ | notBefore=Jun 30 00:00:00 2015 GMT | ||
+ | notAfter=Jun 29 23:59:59 2025 GMT</ | ||
+ | issuer= / | ||
+ | notBefore=Apr | ||
+ | notAfter=Dec | ||
+ | </ | ||
+ | Damit wir später leichter die Zertifikate zuordnen können, kopieren wir die Ausgaben der obigen **openssl**-Aufrufe in die jeweiligen Zertifikatsdateien und stellen den vier Zeilen jeweils eine Raute **#** voran! | ||
+ | </ | ||
+ | # issuer= / | ||
+ | # notBefore=Oct 14 22:20:53 2015 GMT | ||
+ | # notAfter=Oct 15 16:09:11 2017 GMT | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIFoDCCBIigAwIBAgICKRAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVVMx | ||
+ | FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlkU1NMIFNIQTI1 | ||
+ | NiBDQSAtIEc0MB4XDTE1MTAxNDIyMjA1M1oXDTE3MTAxNTE2MDkxMVowgZMxEzAR | ||
+ | BgNVBAsTCkdUMjI2Njc5NDExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29t | ||
+ | L3Jlc291cmNlcy9jcHMgKGMpMTUxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZh | ||
+ | bGlkYXRlZCAtIFJhcGlkU1NMKFIpMRgwFgYDVQQDEw9teDAxLm5hdXNjaC5vcmcw | ||
+ | ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXjwLCvdn28r0ja5zWJhkr | ||
+ | 2FtxGipH/ | ||
+ | M5No3fONVr3cFoj/ | ||
+ | aUiqFsPWw++O/ | ||
+ | iFeG2NLM1lB4yD7zJ9utCnNEr/ | ||
+ | lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv | ||
+ | AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/ | ||
+ | KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir | ||
+ | 0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/ | ||
+ | ke/ | ||
+ | ov1BPKp/ | ||
+ | iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ | ||
+ | sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw | ||
+ | Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t | ||
+ | L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG | ||
+ | AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg | ||
+ | HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG | ||
+ | A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh | ||
+ | cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6 | ||
+ | k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn | ||
+ | X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep | ||
+ | A0pY4peiKrrCDGvW6/ | ||
+ | Md2v5ayCTGAt8S5ITz/ | ||
+ | eVH+n// | ||
+ | x5L03w== | ||
+ | -----END CERTIFICATE-----</ | ||
+ | # issuer= / | ||
+ | # notBefore=Jun 30 00:00:00 2015 GMT | ||
+ | # notAfter=Jun 29 23:59:59 2025 GMT | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIEpjCCA46gAwIBAgIQKByJKWYUQ4BCY1U6MkCuszANBgkqhkiG9w0BAQsFADCB | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTE1MDYzMDAwMDAwMFoXDTI1MDYyOTIzNTk1OVowRzELMAkG | ||
+ | A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlk | ||
+ | U1NMIFNIQTI1NiBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC | ||
+ | AQEAwJ46D5qyutPS3BXs0DBUWTBNQFGuQnFx0o1Tc4H+uODElsWOfsLxt2NKz6ce | ||
+ | P6jnzlOg+i331ubOcBGm7uEDUtJo3j0IDYf9HNcLl2JtgjB2G0c6xPfO7R18jLcX | ||
+ | jlOAHh0PXYz5kOQEHgJ+y7BJ79pSJfv7Z+3dhHRZhA7z3nBmjeRSOPdTWjcTZws+ | ||
+ | u6hYty7t/ | ||
+ | zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/ | ||
+ | t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg | ||
+ | MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/ | ||
+ | / | ||
+ | L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn | ||
+ | hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW | ||
+ | MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE | ||
+ | FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb | ||
+ | lD4/ | ||
+ | iI54SO+9nLCg9fBm/ | ||
+ | tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/ | ||
+ | TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA | ||
+ | 2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/ | ||
+ | nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/ | ||
+ | -----END CERTIFICATE-----</ | ||
+ | # issuer= / | ||
+ | # notBefore=Apr | ||
+ | # notAfter=Dec | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIID/ | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ | ||
+ | BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg | ||
+ | MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 | ||
+ | BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | ||
+ | LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz | ||
+ | +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/ | ||
+ | hsalifD614SgcK9PGpc/ | ||
+ | 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/ | ||
+ | JmxsYAQlTlV+fe+/ | ||
+ | DmKudlW/ | ||
+ | huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/ | ||
+ | HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/ | ||
+ | AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB | ||
+ | zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN | ||
+ | kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD | ||
+ | AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH | ||
+ | SJsMC8tJP33st/ | ||
+ | spki4cErx5z481+oghLrGREt | ||
+ | -----END CERTIFICATE-----</ | ||
+ | - **certificate_chain**: | ||
+ | / | ||
+ | / | ||
+ | # issuer= / | ||
+ | # notBefore=Jun 30 00:00:00 2015 GMT | ||
+ | # notAfter=Jun 29 23:59:59 2025 GMT | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIEpjCCA46gAwIBAgIQKByJKWYUQ4BCY1U6MkCuszANBgkqhkiG9w0BAQsFADCB | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTE1MDYzMDAwMDAwMFoXDTI1MDYyOTIzNTk1OVowRzELMAkG | ||
+ | A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlk | ||
+ | U1NMIFNIQTI1NiBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC | ||
+ | AQEAwJ46D5qyutPS3BXs0DBUWTBNQFGuQnFx0o1Tc4H+uODElsWOfsLxt2NKz6ce | ||
+ | P6jnzlOg+i331ubOcBGm7uEDUtJo3j0IDYf9HNcLl2JtgjB2G0c6xPfO7R18jLcX | ||
+ | jlOAHh0PXYz5kOQEHgJ+y7BJ79pSJfv7Z+3dhHRZhA7z3nBmjeRSOPdTWjcTZws+ | ||
+ | u6hYty7t/ | ||
+ | zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/ | ||
+ | t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg | ||
+ | MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/ | ||
+ | / | ||
+ | L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn | ||
+ | hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW | ||
+ | MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE | ||
+ | FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb | ||
+ | lD4/ | ||
+ | iI54SO+9nLCg9fBm/ | ||
+ | tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/ | ||
+ | TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA | ||
+ | 2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/ | ||
+ | nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/ | ||
+ | -----END CERTIFICATE----- | ||
+ | # subject= / | ||
+ | # issuer= / | ||
+ | # notBefore=Apr | ||
+ | # notAfter=Dec | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIID/ | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ | ||
+ | BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg | ||
+ | MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 | ||
+ | BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | ||
+ | LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz | ||
+ | +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/ | ||
+ | hsalifD614SgcK9PGpc/ | ||
+ | 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/ | ||
+ | JmxsYAQlTlV+fe+/ | ||
+ | DmKudlW/ | ||
+ | huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/ | ||
+ | HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/ | ||
+ | AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB | ||
+ | zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN | ||
+ | kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD | ||
+ | AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH | ||
+ | SJsMC8tJP33st/ | ||
+ | spki4cErx5z481+oghLrGREt | ||
+ | -----END CERTIFICATE-----</ | ||
+ | - **full_certificate_chain**: | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | # issuer= / | ||
+ | # notBefore=Oct 14 22:20:53 2015 GMT | ||
+ | # notAfter=Oct 15 16:09:11 2017 GMT | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIFoDCCBIigAwIBAgICKRAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVVMx | ||
+ | FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlkU1NMIFNIQTI1 | ||
+ | NiBDQSAtIEc0MB4XDTE1MTAxNDIyMjA1M1oXDTE3MTAxNTE2MDkxMVowgZMxEzAR | ||
+ | BgNVBAsTCkdUMjI2Njc5NDExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29t | ||
+ | L3Jlc291cmNlcy9jcHMgKGMpMTUxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZh | ||
+ | bGlkYXRlZCAtIFJhcGlkU1NMKFIpMRgwFgYDVQQDEw9teDAxLm5hdXNjaC5vcmcw | ||
+ | ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXjwLCvdn28r0ja5zWJhkr | ||
+ | 2FtxGipH/ | ||
+ | M5No3fONVr3cFoj/ | ||
+ | aUiqFsPWw++O/ | ||
+ | iFeG2NLM1lB4yD7zJ9utCnNEr/ | ||
+ | lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv | ||
+ | AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/ | ||
+ | KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir | ||
+ | 0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/ | ||
+ | ke/ | ||
+ | ov1BPKp/ | ||
+ | iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ | ||
+ | sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw | ||
+ | Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t | ||
+ | L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG | ||
+ | AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg | ||
+ | HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG | ||
+ | A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh | ||
+ | cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6 | ||
+ | k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn | ||
+ | X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep | ||
+ | A0pY4peiKrrCDGvW6/ | ||
+ | Md2v5ayCTGAt8S5ITz/ | ||
+ | eVH+n// | ||
+ | x5L03w== | ||
+ | -----END CERTIFICATE----- | ||
+ | # subject= / | ||
+ | # issuer= / | ||
+ | # notBefore=Jun 30 00:00:00 2015 GMT | ||
+ | # notAfter=Jun 29 23:59:59 2025 GMT | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIEpjCCA46gAwIBAgIQKByJKWYUQ4BCY1U6MkCuszANBgkqhkiG9w0BAQsFADCB | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTE1MDYzMDAwMDAwMFoXDTI1MDYyOTIzNTk1OVowRzELMAkG | ||
+ | A1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlk | ||
+ | U1NMIFNIQTI1NiBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC | ||
+ | AQEAwJ46D5qyutPS3BXs0DBUWTBNQFGuQnFx0o1Tc4H+uODElsWOfsLxt2NKz6ce | ||
+ | P6jnzlOg+i331ubOcBGm7uEDUtJo3j0IDYf9HNcLl2JtgjB2G0c6xPfO7R18jLcX | ||
+ | jlOAHh0PXYz5kOQEHgJ+y7BJ79pSJfv7Z+3dhHRZhA7z3nBmjeRSOPdTWjcTZws+ | ||
+ | u6hYty7t/ | ||
+ | zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/ | ||
+ | t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg | ||
+ | MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/ | ||
+ | / | ||
+ | L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn | ||
+ | hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW | ||
+ | MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE | ||
+ | FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb | ||
+ | lD4/ | ||
+ | iI54SO+9nLCg9fBm/ | ||
+ | tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/ | ||
+ | TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA | ||
+ | 2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/ | ||
+ | nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/ | ||
+ | -----END CERTIFICATE----- | ||
+ | # subject= / | ||
+ | # issuer= / | ||
+ | # notBefore=Apr | ||
+ | # notAfter=Dec | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIID/ | ||
+ | mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT | ||
+ | MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s | ||
+ | eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv | ||
+ | cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ | ||
+ | BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg | ||
+ | MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 | ||
+ | BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg | ||
+ | LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz | ||
+ | +uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/ | ||
+ | hsalifD614SgcK9PGpc/ | ||
+ | 5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/ | ||
+ | JmxsYAQlTlV+fe+/ | ||
+ | DmKudlW/ | ||
+ | huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/ | ||
+ | HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/ | ||
+ | AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB | ||
+ | zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN | ||
+ | kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD | ||
+ | AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH | ||
+ | SJsMC8tJP33st/ | ||
+ | spki4cErx5z481+oghLrGREt | ||
+ | -----END CERTIFICATE-----</ | ||
+ | * Variante **a**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** der Datei zu, in dem sich " | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in getrennten Dateien vorliegen. | ||
+ | |||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtpd_tls_key_file = / | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_CAfile = / | ||
+ | </ | ||
+ | * Variante **b**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** diejenige Datei zu, in der, angefangen vom Serverzertifikat bis hin zum selbstsignierten Root-Zertifikat der CA, __alle__ benötigten Zertifikate vorfinden. Den Parameter **smtpd_tls_CAfile ** lassen wir erst einmal unbesetzt! < | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtpd_tls_key_file = / | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_CAfile = | ||
+ | </ | ||
+ | |||
+ | Haben die Konfiguration werden Informationen zur TLS-Verschlüsselung im Mailheader der angenommenen Nachrichten eingefügt, vorausgesetzt wir haben den Parameter **[[centos: | ||
+ | < | ||
+ | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | ||
+ | <font style=" | ||
+ | by mx01.nausch.org (Postfix) with ESMTPS id 3F887C00088 | ||
+ | for < | ||
+ | |||
+ | Der Zusatz < | ||
+ | |||
+ | < | ||
+ | # http:// | ||
+ | # default: smtpd_tls_ask_ccert = no | ||
+ | smtpd_tls_ask_ccert = yes | ||
+ | </ | ||
+ | |||
+ | Haben wir diese Funktion gesetzt, werden wir nun Informationen zum **CN** des Zertifikats und eine Bewertung des Vertrauensstatuses zu dem Zertifikat vorfinden, wie nachfolgender Ausschnitt aufzeigt. | ||
+ | |||
+ | < | ||
+ | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx01.nausch.org (Postfix) with ESMTPS id 57BD3C00088 | ||
+ | | ||
+ | |||
+ | Im Mailheader sehen wir nun, dass sich der Client mit einem Zertifikat von < | ||
+ | <code bash># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtpd_tls_key_file = / | ||
+ | smtpd_tls_cert_file = / | ||
+ | smtpd_tls_CAfile = / | ||
+ | </ | ||
+ | |||
+ | Nimmt unser Mailserver nun Nachrichten über einen TLS-verschlüsselten Transportweg entgegen, frägt er den Klient nach seinem Clientzertifikat und Überprüft an Hand der Zertifikatskette, | ||
+ | |||
+ | < | ||
+ | (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx01.nausch.org (Postfix) with ESMTPS id A490AC00088 | ||
+ | for < | ||
+ | |||
+ | Nachdem nun sowohl das Zertifikat und auch die Validierung des selbigen O.K. bzw. " | ||
+ | |||
+ | === SMTP-Client (Versand von eMails) === | ||
+ | Versendet unser Postfix MTA eine Nachricht an einen entfernten Mailserver, wird dieser nach dem **STARTTLS** sein Serverzertifikat präsentieren. Mit publickey des empfangenen Serverzertifikats kann unser Client die Parameter, die nur zur Verschlüsselung der nachfolgenden Nachricht(en) ausgehandelt werden, verschlüsseln. Wir benötigen also auf unserem Mailserver erst einmal kein eigenes Client-Zertifikat mit dem zugehörigen privaten Schlüssel. | ||
+ | |||
+ | Haben wir eine **[[centos: | ||
+ | |||
+ | < | ||
+ | (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) | ||
+ | <font style=" | ||
+ | by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS</ | ||
+ | |||
+ | Der Zusatz < | ||
+ | |||
+ | Wir werden also unserem SMTP-Client ein passendes Serverzertifikat benennen. Im einfachsten Fall verwenden wir das gleiche Zertifikat, welches auch schon unsere SMTP-Daemon verwendet. | ||
+ | |||
+ | < | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Client | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtp_tls_key_file | ||
+ | smtp_tls_cert_file | ||
+ | smtp_tls_CAfile | ||
+ | </ | ||
+ | |||
+ | Soll der Client über ein eigenes Zertifikat verfügen, müssen wir natürlich statt der Variablen, die Pfadangaben zum Zertifikat und Schlüssel angeben. | ||
+ | Ist dieses erfolgt, wird der Empfänger in den Mailhaedern sehen können, dass sich unser Client mit seinem Certifikat < | ||
+ | |||
+ | < | ||
+ | (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) | ||
+ | (<font style=" | ||
+ | by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS | ||
+ | for < | ||
+ | |||
+ | Da wir unserem SMTP-Client noch keine Root-CA-Zertifikate an die Hand gegeben haben, kann dieser auch nicht prüfen, ob dem Serverzertifikat, | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | Wir vervollständigen nun unsere postfix-Konfiguration und geben beim Parameter **smtp_tls_CAfile** an, dass er die gleiche Datei verwenden soll, die auch schon der Daemon verwendet. | ||
+ | |||
+ | < | ||
+ | # (Postfixbuch: | ||
+ | # Pfade für die Key- und Zertifikatsdateien für den SMTP-Client | ||
+ | # Konfigurationsbeispiel " | ||
+ | # Root-Zertifikate der CA in einer gemainsamen Dateien vorliegen. | ||
+ | # default: smtpd_tls_key_file = $smtpd_tls_cert_file | ||
+ | # smtpd_tls_cert_file = | ||
+ | # smtpd_tls_CAfile = | ||
+ | smtp_tls_key_file | ||
+ | smtp_tls_cert_file | ||
+ | smtp_tls_CAfile | ||
+ | </ | ||
+ | |||
+ | Baut nun unser SMTP-Client eine Verbindung zu einem Zielserver auf und stuft die Verbindung an Hand des Zertifikates als vertrauenswürdig ein, wird im Maillog unseres Servers dies mit einem < | ||
+ | |||
+ | < | ||
+ | |||
+ | ==== Ciphers - Chiffren zur Ver- und Entschlüsselung | ||
+ | === opportunistische Verschlüsselung === | ||
+ | Mit dem Parameter **smtpd_tls_ciphers** wird definiert, welchen TLS Cipher Grad der Postfix SMTP-Server bei der opportunistischen TLS-Verschlüsselung verwenden soll. Der Standardwert " | ||
+ | * **export** Aktiviert "// | ||
+ | * **low** Aktiviert "// | ||
+ | * **medium** Aktiviert "// | ||
+ | * **high** Aktiviert "// | ||
+ | * **null** Aktiviert lediglich die "// | ||
+ | |||
+ | <WRAP center round important> | ||
+ | Da die Verschlüsselung optional ist, ist eine Änderung der Option nicht notwendig, es sei denn die Änderung ist notwendig und daher gut überlegt sowie unumgänglich! | ||
+ | </ | ||
+ | |||
+ | Der Parameter **smtpd_tls_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Daemon (ankommende Verbindungen) bei der opportunistischen TLS-Verschlüsselung verwenden soll. | ||
+ | |||
+ | <code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
+ | # des Postfix SMTP-Daemon bei ankommenden Verbindungen | ||
+ | # http:// | ||
+ | # default: smtpd_tls_ciphers = export | ||
+ | </ | ||
+ | |||
+ | Der Parameter **smtp_tls_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client (abgehende Verbindungen) bei der opportunistischen TLS-Verschlüsselung verwenden soll. | ||
+ | |||
+ | <code bash># Django : 2014-10-25 - Minimaler TLS Cipher Grad für die opportunistischen TLS-Verschlüsselung | ||
+ | # des Postfix SMTP-Client bei ausgehenden Verbindungen | ||
+ | # http:// | ||
+ | # default: smtp_tls_ciphers = export | ||
+ | </ | ||
+ | |||
+ | Der Parameter **smtpd_tls_exclude_ciphers** legt eine Liste von Chiffren oder Chiffre-Typen fest, welche bei allen TLS Sicherheitsstufen beim ankommenden Verkehr beim Postfix SMTP-Daemon ausgeschlossen werden sollen. | ||
+ | |||
+ | <code bash># Django : 2014-10-25 - Liste der Chiffren oder Chiffre-Typen, | ||
+ | # Sicherheitsstufen des Postfix SMTP-Daemon ausgeschlossen werden sollen. | ||
+ | # http:// | ||
+ | # default: smtpd_tls_exclude_ciphers = | ||
+ | smtpd_tls_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | 3DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Der Parameter **smtp_tls_exclude_ciphers** legt eine Liste von Chiffren oder Chiffre-Typen fest, welche bei allen TLS Sicherheitsstufen beim ausgehenden Verkehr des Postfix SMTP-Client ausgeschlossen werden sollen. | ||
+ | |||
+ | <code bash># Django : 2014-10-25 - Liste der Chiffren oder Chiffre-Typen des Postfix SMTP-Client | ||
+ | # bei allen TLS Sicherheitsstufen ausgeschlossen werden sollen. | ||
+ | # http:// | ||
+ | # default: smtp_tls_exclude_ciphers = | ||
+ | smtp_tls_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | 3DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | === verpflichtende Verschlüsselung === | ||
+ | Der Parameter **smtpd_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Daemon bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende Verschlüsselung | ||
+ | # des Postfix SMTP-Daemon bei ankommenden Verbindungen | ||
+ | # http:// | ||
+ | # default: smtpd_tls_mandatory_ciphers = medium | ||
+ | smtpd_tls_mandatory_ciphers = high</ | ||
+ | |||
+ | Der Parameter **smtp_tls_mandatory_ciphers** definiert, welchen TLS Cipher Grad der Postfix SMTP-Client bei der verpflichtenden TLS-Verschlüsselung verwenden soll. | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Minimum TLS Cipher für die verpflichtende Verschlüsselung | ||
+ | # des Postfix SMTP-Clients bei ausgehenden Verbindungen | ||
+ | # http:// | ||
+ | # default: smtp_tls_mandatory_ciphers = medium | ||
+ | smtp_tls_mandatory_ciphers = high</ | ||
+ | |||
+ | Der Parameter **smtpd_tls_mandatory_exclude_ciphers** legt eine Liste von Chiffren oder Chiffre-Typen fest, welche bei allen verpflichtenden TLS Sicherheitsstufen beim ankommenden Verkehr des Postfix SMTP-Daemon ausgeschlossen werden sollen. Im [[https:// | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung | ||
+ | # des postfix SMTP-Daemons. | ||
+ | # http:// | ||
+ | # default: smtpd_tls_mandatory_exclude_ciphers = | ||
+ | smtpd_tls_mandatory_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Der Parameter **smtp_tls_mandatory_exclude_ciphers** legt eine Liste von Chiffren oder Chiffre-Typen fest, welche bei allen verpflichtenden TLS Sicherheitsstufen beim ausgehenden Verkehrs des Postfix SMTP-Client ausgeschlossen werden sollen. Im [[https:// | ||
+ | |||
+ | |||
+ | <code bash># Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung | ||
+ | # des postfix SMTP-Clients. | ||
+ | # http:// | ||
+ | # default: smtp_tls_mandatory_exclude_ciphers = | ||
+ | smtp_tls_mandatory_exclude_ciphers = | ||
+ | smtp_tls_exclude_ciphers = | ||
+ | aNULL | ||
+ | eNULL | ||
+ | | ||
+ | DES | ||
+ | RC4 | ||
+ | MD5 | ||
+ | PSK | ||
+ | aECDH | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | ==== Protokolle | ||
+ | === opportunistische Verschlüsselung === | ||
+ | Mit dem Parameter **smtpd_tls_protocols** kann definiert werden, welche TLS Protokolle bei der opportunistischen Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | ||
+ | <code bash># Django : 2014-10-19 - Positiv-/ | ||
+ | # Postfix SMTP-Server bei der opportunischtischen Verschlüsselung | ||
+ | # berücksichtigen soll. | ||
+ | # http:// | ||
+ | # default: smtpd_tls_protocols = | ||
+ | smtpd_tls_protocols = | ||
+ | | ||
+ | | ||
+ | |||
+ | Mit dem Parameter **smtp_tls_protocols** und **lmtp_tls_protocols** kann definiert werden, welche TLS Protokolle bei der opportunistischen Verschlüsselung des ausgehenden SMTP/ | ||
+ | <code bash># Django : 2014-10-19 - Positiv-/ | ||
+ | # Postfix SMTP-/ | ||
+ | # berücksichtigen soll. | ||
+ | # http:// | ||
+ | # default: smtp_tls_protocols = !SSLv2 | ||
+ | # lmtp_tls_protocols = !SSLv2 | ||
+ | smtp_tls_protocols = | ||
+ | | ||
+ | | ||
+ | lmtp_tls_protocols = $smtp_tls_protocols</ | ||
+ | |||
+ | === verpflichtende Verschlüsselung === | ||
+ | Mit dem Parameter **smtpd_tls_mandatory_protocols** wird definiert, welche TLS Protokolle bei der verpflichtenden Verschlüsselung des ankommenden SMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen. | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Positiv-/ | ||
+ | # Postfix SMTP-Server bei der verpflichtenden Verschlüsselung | ||
+ | # berücksichtigen soll. | ||
+ | # http:// | ||
+ | # default: smtpd_tls_mandatory_protocols = !SSLv2 | ||
+ | smtpd_tls_mandatory_protocols = | ||
+ | | ||
+ | | ||
+ | |||
+ | Mit dem Parameter **smtp_tls_mandatory_protocols** und **lmtp_tls_mandatory_protocols** wird definiert, welche TLS Protokolle bei der verpflichtenden Verschlüsselung des ausgehenden SMTP/ | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Positiv-/ | ||
+ | # Postfix SMTP-/ | ||
+ | # berücksichtigen soll. | ||
+ | # http:// | ||
+ | # default: smtp_tls_mandatory_protocols = !SSLv2 | ||
+ | smtp_tls_mandatory_protocols = | ||
+ | | ||
+ | | ||
+ | lmtp_tls_mandatory_protocols = $smtp_tls_mandatory_protocols</ | ||
+ | |||
+ | ==== Verschlüsselung beim SMTP-Daemon ==== | ||
+ | Mit der Option **smtpd_tls_security_level** beeinflusst man das SMTP TLS Verhalten des Postfix SMTP Daemons. | ||
+ | Folgende Verschlüsselungsvarianten sind einstellbar: | ||
+ | * **none**: TLS wird nicht genutzt; d.h. die Übertragung werden __nicht__ verschlüsselt! | ||
+ | * **may**: Opportunistische TLS Verschlüsselung: | ||
+ | * **encrypt**: | ||
+ | |||
+ | === opportunistische Verschlüsselung === | ||
+ | |||
+ | Soll der SMTP-Daemon dem SMTP-Client eine TLS-Verschlüsselung anbieten, aber nicht zwingend vorschreiben, | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Opportunistische TLS-Verschlüsselung für den | ||
+ | # SMTP-Daemon für den ankommenden Verkehr aktiviert; d.h. STARTTLS | ||
+ | # wird dem Remote-SMTP-Client angeboten aber nicht zwingend | ||
+ | # vorgeschrieben. | ||
+ | # http:// | ||
+ | # | ||
+ | # Folgende Verschlüsselungsvarianten sind einstellbar: | ||
+ | # none: TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver- | ||
+ | # | ||
+ | # | ||
+ | # may : Opportunistische TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der | ||
+ | # | ||
+ | # oder nicht. | ||
+ | # | ||
+ | # encrypt: Vorgeschriebene TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten und zwingend vorgeschrieben! Diese | ||
+ | # | ||
+ | # zu wählen. Öffentlich erreichbare Mailserver müssen neben einer | ||
+ | # | ||
+ | # default: smtpd_tls_security_level = | ||
+ | smtpd_tls_security_level = may | ||
+ | </ | ||
+ | |||
+ | === verpflichtende Verschlüsselung für alle Clients === | ||
+ | Betreibt man ein Mailgateway, | ||
+ | |||
+ | < | ||
+ | # SMTP-Daemon für den ankommenden Verkehr aktiviert; d.h. STARTTLS | ||
+ | # wird dem Remote-SMTP-Client angeboten aber nicht zwingend | ||
+ | # vorgeschrieben. | ||
+ | # http:// | ||
+ | # | ||
+ | # Folgende Verschlüsselungsvarianten sind einstellbar: | ||
+ | # none: TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver- | ||
+ | # | ||
+ | # | ||
+ | # may : Opportunistische TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der | ||
+ | # | ||
+ | # oder nicht. | ||
+ | # | ||
+ | # encrypt: Vorgeschriebene TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten und zwingend vorgeschrieben! Diese | ||
+ | # | ||
+ | # zu wählen. Öffentlich erreichbare Mailserver müssen neben einer | ||
+ | # | ||
+ | # default: smtpd_tls_security_level = | ||
+ | smtpd_tls_security_level = encrypt | ||
+ | </ | ||
+ | |||
+ | === verpflichtende Verschlüsselung nur für ausgewählte Clients === | ||
+ | Betreiben wir einen Mailserver, der Nachrichten aus dem Internet empfangen soll, werden in aller Regel die Option **smtpd_tls_security_level = may**(([[centos: | ||
+ | |||
+ | Sehr wohl gibt es aber meist Kommunikationspartner, | ||
+ | |||
+ | Wir setzen also die Option **smtpd_tls_security_level = may** damit unser SMTP-Daemon allen TLS anbietet, die nach dieser Eigenschaft fragen bzw. die mit dem SMTP-Kommando **STARTTLS** einen transportverschlüsselten Kanal aufbauen wollen. | ||
+ | |||
+ | < | ||
+ | # SMTP-Daemon für den ankommenden Verkehr aktiviert; d.h. STARTTLS | ||
+ | # wird dem Remote-SMTP-Client angeboten aber nicht zwingend | ||
+ | # vorgeschrieben. | ||
+ | # http:// | ||
+ | # | ||
+ | # Folgende Verschlüsselungsvarianten sind einstellbar: | ||
+ | # none: TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver- | ||
+ | # | ||
+ | # | ||
+ | # may : Opportunistische TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der | ||
+ | # | ||
+ | # oder nicht. | ||
+ | # | ||
+ | # encrypt: Vorgeschriebene TLS Verschlüsselung: | ||
+ | # wird STARTTLS angeboten und zwingend vorgeschrieben! Diese | ||
+ | # | ||
+ | # zu wählen. Öffentlich erreichbare Mailserver müssen neben einer | ||
+ | # | ||
+ | # default: smtpd_tls_security_level = | ||
+ | smtpd_tls_security_level = may | ||
+ | </ | ||
+ | |||
+ | Bei der [[centos: | ||
+ | |||
+ | In der Lookup-Tabelle [[centos: | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | # Kapitel 5.2.7 access-Tabelle: | ||
+ | # Tabelle zum black- und whitelisten einzelner Absender auf Basis ihrer | ||
+ | # eMail-Adresse. Nach dem Ändern und/oder Erweitern der Tabelle, muß noch | ||
+ | # mittels: | ||
+ | # $ postmap / | ||
+ | # | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | # | ||
+ | sys4.de | ||
+ | </ | ||
+ | |||
+ | Anschließend erstellen wir die zugehörige db-Datei mit folgendem Aufruf. | ||
+ | # postmap / | ||
+ | |||
+ | == Testmail mit STARTTLS == | ||
+ | Als erstes Testen wir nun, ob von der betreffenden Domain aus noch eMail eingeliefert werden können. Der Einfachheit halber nutzen wir hierzu das // | ||
+ | # swaks --to django@nausch.org --from p@sys4.de --header-X-Test " | ||
+ | |||
+ | < | ||
+ | === Connected to mx01.nausch.org. | ||
+ | <- 220 mx01.nausch.org ESMTP Postfix | ||
+ | -> EHLO mail.sys4.de | ||
+ | <- 250-mx01.nausch.org | ||
+ | <- 250-PIPELINING | ||
+ | <- 250-SIZE 52428800 | ||
+ | <- 250-ETRN | ||
+ | <- 250-STARTTLS | ||
+ | <- 250-ENHANCEDSTATUSCODES | ||
+ | <- 250 8BITMIME | ||
+ | -> STARTTLS | ||
+ | <- 220 2.0.0 Ready to start TLS | ||
+ | === TLS started with cipher TLSv1.2: | ||
+ | === TLS no local certificate set | ||
+ | === TLS peer DN="/ | ||
+ | ~> EHLO p@sys4.de | ||
+ | <~ 250-mx01.nausch.org | ||
+ | <~ 250-PIPELINING | ||
+ | <~ 250-SIZE 52428800 | ||
+ | <~ 250-ETRN | ||
+ | <~ 250-ENHANCEDSTATUSCODES | ||
+ | <~ 250 8BITMIME | ||
+ | ~> MAIL FROM:< | ||
+ | <~ 250 2.1.0 Ok | ||
+ | ~> RCPT TO:< | ||
+ | <~ 250 2.1.5 Ok | ||
+ | ~> DATA | ||
+ | <~ 354 End data with < | ||
+ | ~> Date: Fri, 09 Oct 2015 15:24:46 +0200 | ||
+ | ~> To: django@nausch.org | ||
+ | ~> From: p@sys4.de | ||
+ | ~> Subject: Test zur verpflichtenden Verschlüsselung auf Port 25 | ||
+ | ~> X-Mailer: swaks v20130209.0 jetmore.org/ | ||
+ | ~> X-Test: Test-eMail | ||
+ | ~> | ||
+ | ~> This is a test mailing | ||
+ | ~> | ||
+ | ~> . | ||
+ | <~ 250 2.0.0 Ok: queued as 80149C00093 | ||
+ | ~> QUIT | ||
+ | <~ 221 2.0.0 Bye | ||
+ | === Connection closed with remote host.</ | ||
+ | |||
+ | Die Nachricht wurde also wie erwartet angenommen und zugestellt, den zugehörigen Eintrag dazu finden wir im Maillog unseres Servers. | ||
+ | # less / | ||
+ | < | ||
+ | Oct 9 15:24:52 vml000087 postfix/ | ||
+ | Oct 9 15:24:52 vml000087 postfix/ | ||
+ | Oct 9 15:24:53 vml000087 postfix/ | ||
+ | Oct 9 15:24:53 vml000087 postfix/ | ||
+ | Oct 9 15:24:53 vml000087 postfix/ | ||
+ | Oct 9 15:24:53 vml000087 postfix/ | ||
+ | |||
+ | Ob nun die Übertragung von eMail von der Domäne **sys4.de** unterbunden wird, wenn keine TLS-Verschlüsselung zu Stande kommt, werden wir nun als nächstes testen. Hierzu verwenden wir, wie zuvor auch schon das Programm **swaks** aber diesesmal __**ohne**__ den Parameter **%%--%%tls**. | ||
+ | # swaks --to django@nausch.org --from p@sys4.de --header-X-Test " | ||
+ | |||
+ | < | ||
+ | === Connected to mx01.nausch.org. | ||
+ | <- 220 mx01.nausch.org ESMTP Postfix | ||
+ | -> EHLO mail.sys4.de | ||
+ | <- 250-mx01.nausch.org | ||
+ | <- 250-PIPELINING | ||
+ | <- 250-SIZE 52428800 | ||
+ | <- 250-ETRN | ||
+ | <- 250-STARTTLS | ||
+ | <- 250-ENHANCEDSTATUSCODES | ||
+ | <- 250 8BITMIME | ||
+ | -> MAIL FROM:< | ||
+ | <- 250 2.1.0 Ok | ||
+ | -> RCPT TO:< | ||
+ | <** 571 5.7.1 Session encryption is required. Contact your postmaster/ | ||
+ | -> QUIT | ||
+ | <- 221 2.0.0 Bye | ||
+ | === Connection closed with remote host.</ | ||
+ | |||
+ | Wie erwartet wird die Annahme der Nachricht von unserem Mailserver geblockt, da wir ja definiert hatten, dass Nachrichten von **sys4.de** nur noch angenommen werden, wenn eine TLS-Verschlüsselung (verpflichtend!) zu Stande kam"! Der Zustellversuch wurde mit einem temporären Fehler **450 4.7.1 Session encryption is required;** abgelehnt | ||
+ | |||
+ | Im Maillog unseres MX wird dies natürlich entsprechend dokumentiert. | ||
+ | |||
+ | < | ||
+ | Oct 9 13:27:21 vml000087 postfix/ | ||
+ | Oct 9 13:27:27 vml000087 postfix/ | ||
+ | |||
+ | Da es sich aber um ein erwünschtes Ergebnis unserer Konfigurationsbemühungen handelt handelt, werden einen **500**er Fehlercode ausgeben, damit der einliefernde Client sofort über das Ergebnis informiert wird. Hierzu passen wir den betreffenden **plaintext_reject_code = 571** in der Sektion **[[centos: | ||
+ | # systemctl restart postfix.service | ||
+ | |||
+ | Anschließend versuchen wir erneut eine Nachricht **ohne STARTTLS** einzuliefern. | ||
+ | # swaks --to django@nausch.org --from p@sys4.de --header-X-Test " | ||
+ | |||
+ | < | ||
+ | === Connected to mx01.nausch.org. | ||
+ | <- 220 mx01.nausch.org ESMTP Postfix | ||
+ | -> EHLO mail.sys4.de | ||
+ | <- 250-mx01.nausch.org | ||
+ | <- 250-PIPELINING | ||
+ | <- 250-SIZE 52428800 | ||
+ | <- 250-ETRN | ||
+ | <- 250-STARTTLS | ||
+ | <- 250-ENHANCEDSTATUSCODES | ||
+ | <- 250 8BITMIME | ||
+ | -> MAIL FROM:< | ||
+ | <- 250 2.1.0 Ok | ||
+ | -> RCPT TO:< | ||
+ | <** 571 5.7.1 Session encryption is required. Contact your postmaster/ | ||
+ | -> QUIT | ||
+ | <- 221 2.0.0 Bye | ||
+ | === Connection closed with remote host.</ | ||
+ | |||
+ | Auch dieser Zustellversuch wird im Maillog vermerkt, dieses mal aber mit dem Fehlercode **571 5.7.1 Session encryption is required.** | ||
+ | |||
+ | < | ||
+ | Oct 9 13:38:27 vml000087 postfix/ | ||
+ | Oct 9 13:38:30 vml000087 postfix/ | ||
+ | ==== Verschlüsselung beim SMTP-Client ==== | ||
+ | Mit der Option smtp_tls_security_level beeinflusst man das SMTP TLS Verhalten des Postfix SMTP Clients, also dem ausgehenden Mailverkehr. Folgende Verschlüsselungsvarianten sind einstellbar: | ||
+ | * **none**: TLS-Verschlüsselung wird nicht genutzt, es sei denn für bestimmte Ziele wird mit der Option // | ||
+ | * **may**: Opportunistische TLS-Verschlüsselung wird verwendet, sofern der Zielserver eine TLS-Verschlüsselung anbietet. Unterstützt der Zielserver keine TLS-Verschlüsselung wird unverschlüsselt übertragen! | ||
+ | * **encrypt**: | ||
+ | * **dane**: Opportunistisches DANE TLS. Bei dieser Sicherheitsstufe wird die TLS Policy des Ziels via [[http:// | ||
+ | * **dane-only**: | ||
+ | * **fingerprint**: | ||
+ | * **verify**: Vorgeschriebene TLS Überprüfung. Bei dieser Sicherheitsstufe wird der Name des Serverzertifikates mit dem Ergebnis der DNS MX Abfrage verglichen und vertraut. Der Parameter // | ||
+ | * **secure**: Secure-Channel TLS Bei dieser Sicherheitsstufe wird das Ergebnis der DNS MX Abfrage nicht als hinreichend sicher betrachtet umd damit eine TLS Peername Überprüfung durchzuführen. Stattdessen wird der Standardname des Serverzertifikates, | ||
+ | |||
+ | === opportunistische Verschlüsselung === | ||
+ | |||
+ | Soll der SMTP-Client vor dem Übertragen der Nachrichten eine angebotene TLS-Verschlüsselung nutzen, aber beim Nichtzustandekommen des TLS-Handshakes die Nachricht unverschlüsselt übertragen, | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Opportunistische TLS-Verschlüsselung für den | ||
+ | # Opportunistische TLS-Verschlüsselung wird verwendet, sofern der | ||
+ | # Zielserver eine TLS-Verschlüsselung anbietet. Unterstützt der | ||
+ | # Zielserver keine TLS-Verschlüsselung wird unverschlüsselt über- | ||
+ | # tragen! | ||
+ | # http:// | ||
+ | # default: smtp_tls_security_level = | ||
+ | smtp_tls_security_level = may</ | ||
+ | |||
+ | === verpflichtende Verschlüsselung zu allen Empfängern/ | ||
+ | Betreibt man ein Mailgateway in einer kundeneigenen Infrastruktur, | ||
+ | * **encrypt**: | ||
+ | * **dane-only**: | ||
+ | * **verify**: Vorgeschriebene TLS Überprüfung. Bei dieser Sicherheitsstufe wird der Name des Serverzertifikates mit dem Ergebnis der DNS MX Abfrage verglichen und vertraut. Der Parameter smtp_tls_verify_cert_match definiert, wie der Name des Servers überprüft wird. | ||
+ | * **secure**: Secure-Channel TLS Bei dieser Sicherheitsstufe wird das Ergebnis der DNS MX Abfrage nicht als hinreichend sicher betrachtet und damit eine TLS Peername Überprüfung durchzuführen. Stattdessen wird der Standardname des Serverzertifikates, | ||
+ | |||
+ | <WRAP center round important> | ||
+ | Betreiben wir aber einen Mailserver, der letztendlich zu vielen wenn nicht gar allen Mailservern im Internet Nachrichten zustellen muss, werden wir nicht generell eine verpflichtende TLS-Verschlüsselung zu allen Zielen vorschreiben können! | ||
+ | Über die **[[http:// | ||
+ | </ | ||
+ | |||
+ | === verpflichtende Verschlüsselung zu ausgewählten Empfängern/ | ||
+ | An Hand eines Praxis-Beispiel wollen wir nun die Zielpunkt abhängige verpflichtende Verschlüsselung genauer betrachten. Unser Mailserver soll Nachrichten nur an die Zieldomäne tachtler.net übertragen, | ||
+ | openssl s_client -starttls smtp -connect mx1.tachtler.net: | ||
+ | Als ersten Schritt holen wir uns das Serverzertifikat und errechnen den zugehörigen **Fingerprint** mit nachfolgendem Befehl. | ||
+ | # openssl s_client -starttls smtp -connect mx1.tachtler.net: | ||
+ | |||
+ | SHA1 Fingerprint=C3: | ||
+ | |||
+ | <WRAP center round alert 80%> | ||
+ | Den erhaltenen Fingerprint // | ||
+ | |||
+ | Keinesfalls vermerken wir **__ohne__** weitere Prüfung den Fingerprints in einer lokalen Konfigurationsdatei! | ||
+ | </ | ||
+ | |||
+ | Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei // | ||
+ | |||
+ | Zunächst legen wir uns die benötigte Konfigurationsdatei an. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # Tabelle für die zielwegorientierte individuelle Vorgabe einer | ||
+ | # verpflichtenden TLS-Transportverschlüsselung einzelner Zieldomains. | ||
+ | # http:// | ||
+ | # | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels: | ||
+ | # | ||
+ | # $ postmap / | ||
+ | # | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | |||
+ | # Zieldomain | ||
+ | tachtler.net | ||
+ | |||
+ | Wie in der Konfigurationsdatei angegeben erstellen wir nun noch die benötigte Datenbank-Datei. | ||
+ | # postmap / | ||
+ | |||
+ | Damit nun der SMTP-Client weiss wie er den richtigen Fingerprint (MD5 oder SHA1) des empfangenen Server-Zertifikates ermitteln soll, müssen wir den verwendeten **[[https:// | ||
+ | # vim / | ||
+ | |||
+ | <code bash>################################################################################ | ||
+ | ## TLS/ | ||
+ | # | ||
+ | |||
+ | ... | ||
+ | |||
+ | # Django : 2015-10-07 - Hashfunktion für den Fingerprint der Zertifikate | ||
+ | # Empfängt der SMTP-Client ein Serverzertifikat, | ||
+ | # Prüfung, ob er mit dem richtigen Zielserver verbunden ist, | ||
+ | # den Zertifikatsfingerprint ermitteln. | ||
+ | # default: smtp_tls_fingerprint_digest = md5 | ||
+ | smtp_tls_fingerprint_digest = sha1 | ||
+ | |||
+ | # Django : 2015-10-07 - Zielorientierte SMTP TLS Policies | ||
+ | # Nutzung einer Tabelle für die zielwegorientierte individuelle | ||
+ | # Vorgabe einer verpflichtenden TLS-Transportverschlüsselung | ||
+ | # einzelner Zieldomains. | ||
+ | # smtp_tls_security_level eine individuelle Tabelle für die | ||
+ | # http:// | ||
+ | # default: smtp_tls_policy_maps = | ||
+ | smtp_tls_policy_maps = btree:/ | ||
+ | |||
+ | ... | ||
+ | |||
+ | </ | ||
+ | |||
+ | Zur Aktivierung der Konfiguration führen wir noch einen Reload des Daemon durch. | ||
+ | # systemctl reload postfix.service | ||
+ | |||
+ | Unser Mailserver wir nun Nachrichten nur noch beim Zielsystem mx1.tachtler.net abliefern, wenn der Fingerprint des empfangenen Serverzertifikates dem entspricht, der in der Datei // | ||
+ | |||
+ | Zum Testen unserer Konfigurationsänderung tragen wir einfach kurz einen falschen Fingerprint der Zieldomain ein und beobachten unser maillog. | ||
+ | # tailf / | ||
+ | |||
+ | < | ||
+ | Oct 12 14:59:43 vml000087 postfix/ | ||
+ | Oct 12 14:59:43 vml000087 postfix/ | ||
+ | Oct 12 14:59:43 vml000087 postfix/ | ||
+ | Oct 12 14:59:43 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | Oct 12 14:59:44 vml000087 postfix/ | ||
+ | |||
+ | Oct 12 14:59:45 vml000087 postfix/ | ||
+ | Oct 12 14:59:45 vml000087 postfix/ | ||
+ | </ | ||
+ | |||
+ | Wir sehen in dem Beispiel die Einlieferung einer Nachricht via **submission Port 587**, gefolgt vom Verbindungsaufbau des **SMTP-Clients** in Richtung **mx1.tachtler.net[88.217.171.167]: | ||
+ | |||
+ | Wurde das Zertifikat ausgetauscht ohne dem versendenden Kommunikationspartner zu informieren, | ||
+ | | ||
+ | | ||
+ | |||
+ | Die Nachricht wird also nicht versandt, da nicht sichergestellt werden kann, dass wir auch wirklich mit dem richtigen Empfangssystem reden. Statt dessen wir die Nachricht in die **// | ||
+ | |||
+ | <WRAP center round tip> | ||
+ | An Hand dieses Beispiels kann man also zielwegorientiert eine verpflichtende Verschlüsselung zur Übertragung definieren. In Verbindung mit der **[[centos: | ||
+ | |||
+ | <WRAP center round important > | ||
+ | Hat man viele dieser Ziele, kann das manuelle Pflegen von Fingerprints zum zeitaufwändigen Unterfangen werden. Zumal bei anstehenden Zertifikatsänderungen rechtzeitig dafür gesorgt werden muss, dass das sendende System die neuen Fingerprints auch kennt. Beispiele aus der Praxis zeigen leider, dass viele professionelle Dienstleister und auch entsprechend versierte und geschulte Postmaster hier __grosse Schwierigkeiten__ beim Ablauf und rechtzeitigen Erneuerung der Fingerprints haben. \\ | ||
+ | Wesentlich einfacher ist hier die Nutzung einer verpflichtenden Verschlüsselung unter Zuhilfenahme der Option **dane-only**. | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === " | ||
+ | Haben wir einen DNSSEC fähigen Resolver wie z.B. **unbound** oder **bind** können wir für die Überprüfung des Serverzertifikates bei ausgehenden Verbindungen den TLSA-Eintrag des Zielmailservers abfragen. Somit können wird überprüfen ob wie auch wirklich beim gewünschten Ziel angelangt sind, oder ob uns ein unbekannter Dritter vorgaukelt der Zielmailserver zu sein. | ||
+ | |||
+ | Mit Hilfe der Postfix Konfigurationsparameter **smtp_tls_policy_maps** oder **smtp_tls_security_level** können wir Festlegung ob eine DANE/ | ||
+ | |||
+ | Egal ob nun opportunistisch oder verpflichtend, | ||
+ | # vim / | ||
+ | |||
+ | <code bash>################################################################################ | ||
+ | ## TLS/ | ||
+ | # | ||
+ | |||
+ | ... | ||
+ | |||
+ | # Django : 2015-02-04 - DNS-Support des Postfix SMTP-Client | ||
+ | # Wird der Parameter smtp_dns_support_level auf seinem Defaultwert | ||
+ | # belassen, wird der SMTP-Client abhängig vom Parameter | ||
+ | # disable_dns_lookups, | ||
+ | # Folgende Werte können bei smtp_dns_support_level gesetzt werden: | ||
+ | # - disabled : Es werden keinerlei DNS-Abfragen vom Client vorge- | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # - enabled | ||
+ | # | ||
+ | # nicht von []-Klöammern eingeschlossen sind, wird | ||
+ | # nicht der zugehörige A-Record angefragt, sondern | ||
+ | # der MX-Record | ||
+ | # | ||
+ | # - dnssec | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # " | ||
+ | # | ||
+ | # keine zusätzliche Sicherheit im Sinne von Postfix. | ||
+ | # default: smtp_dns_support_level = | ||
+ | smtp_dns_support_level = dnssec | ||
+ | |||
+ | # Django : 2015-02-04 - Opportunistische DANE TLS-Verschlüsselung für den | ||
+ | # SMTP-Client für den ausgehenden Verkehr aktiviert; Bei diesem | ||
+ | # Sicherhietslevel wird versucht die TLS Sicherheitsvorgaben via | ||
+ | # DNSsec zu erfragen. | ||
+ | # default: smtp_tls_security_level = | ||
+ | # last : smtp_tls_security_level = may | ||
+ | smtp_tls_security_level = dane | ||
+ | |||
+ | ... | ||
+ | |||
+ | </ | ||
+ | |||
+ | Wollen wir für bestimmte Kommunikationspartner definieren, dass Nachrichten nur versandt werden dürfen, wenn der Wert des TLSA-Records dem entspricht, den unser Client vom zur Verfügung gestellten Serverzertifikats ermittelt hat, greifen wir wieder auf die **smtp_tls_policy_maps** zurück. | ||
+ | |||
+ | In folgendem Beispiel, wird für den Kommunikationspartner **tachtler.net** " | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # Tabelle für die zielwegorientierte individuelle Vorgabe einer | ||
+ | # verpflichtenden TLS-Transportverschlüsselung einzelner Zieldomains. | ||
+ | # http:// | ||
+ | # | ||
+ | # Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels: | ||
+ | # | ||
+ | # $ postmap / | ||
+ | # | ||
+ | # die zugehörige Datenbank erzeugt werden. | ||
+ | |||
+ | # Zieldomain | ||
+ | tachtler.net | ||
+ | sys4.de | ||
+ | </ | ||
+ | |||
+ | Vor der Aktivierung einer Konfigurationsänderung musss noch die zugehörige db_Datei der lookup- Tabelle **smtp_tls_policy_maps**. | ||
+ | # postmap / | ||
+ | |||
+ | Nun aktivieren wir noch die Änderungen an unserer **main.cf**. | ||
+ | # systemctl restart postfix.service | ||
+ | |||
+ | Wir nun eine Nachricht an den Zielserver gesendet, für die wir einen **smtp_tls_security_level = // | ||
+ | |||
+ | < | ||
+ | Oct 13 09:53:36 vml000087 postfix/ | ||
+ | Oct 13 09:53:37 vml000087 postfix/ | ||
+ | Oct 13 09:53:37 vml000087 postfix/ | ||
+ | </ | ||
+ | |||
+ | Unterscheiden sich aber beide Fingerprints wird die Kommunikation mit dem Zielsystem abgebrochen und die Nachricht in die **deffered**-Queue gestellt und ggf. später wieder versucht die eMail zuzustellen. | ||
+ | |||
+ | < | ||
+ | Oct 13 12:32:22 mailslut1 postfix/ | ||
+ | |||
+ | |||
+ | ==== Perfect Forward Secrecy ==== | ||
+ | Zur Aktivierung von **[[http:// | ||
+ | - **Ephemeral-Diffie-Hellmann Schlüssel**: | ||
+ | # http:// | ||
+ | # Definition des 512 bit Schlüssels (export ciphers) für die obsoleten | ||
+ | # „Export“-Ciphers und des 2048-bit (non export ciphers) Schlüssels | ||
+ | # für all die anderen EDH Cipher Suits. | ||
+ | # default: smtpd_tls_dh512_param_file = | ||
+ | # smtpd_tls_dh1024_param_file = | ||
+ | smtpd_tls_dh1024_param_file = / | ||
+ | smtpd_tls_dh512_param_file = / | ||
+ | - **" | ||
+ | # Ephemeral Elliptic-Curve Diffie-Hellman (EECDH) | ||
+ | # http:// | ||
+ | # default: smtpd_tls_eecdh_grade = strong | ||
+ | smtpd_tls_eecdh_grade = ultra</ | ||
+ | - **Präferierter standardisierter kryptographischer Algorithmus**: | ||
+ | # vom Client genannten Wunsch-Ciphers | ||
+ | # http:// | ||
+ | # default: tls_preempt_cipherlist = no | ||
+ | tls_preempt_cipherlist = yes</ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== TLS Logging ==== | ||
+ | === Informationen im Mailheader zur Verschlüsselung === | ||
+ | Unser MTA kann mit der Option **smtpd_tls_received_header** im Mailheader der Nachricht folgende Daten vermerken: | ||
+ | * Protocol | ||
+ | * Cipher | ||
+ | * SMTP Client CommonName | ||
+ | * Client Certificate Issuer CommonName | ||
+ | |||
+ | <code bash># Django : 2014-10-19 - Headerzeile in der eMail einfügen mit Informationen | ||
+ | # zur verwendeten Verschlüsselung | ||
+ | # http:// | ||
+ | # default: smtpd_tls_received_header = no | ||
+ | smtpd_tls_received_header = yes</ | ||
+ | |||
+ | === TLS-Logging beim Mailempfang === | ||
+ | Mit Hilfe der Option **smtpd_tls_loglevel** kann das Logging des SMTP Daemons beeinflusst werden. Bei den einzelnen Loglevel schließt ein höherer Loglevel entsprechend niedrigere jeweils mit ein. | ||
+ | * **0** TLS-Logging deaktiviert (Defaultwert) | ||
+ | * **1** Pro Verbindung wird eine Logzeile mit der Zusammenfassung des TLS Handshakes erzeugt. Sofern die Überprüfung des Client Zertifiaktes nicht gefordert ist, wird keine Fehlermeldung zur Zertifikatskette des Clientzertifikates erzeugt. | ||
+ | * **2** Zusätzlich die TLS Negotiation loggen. | ||
+ | * **3** Zusätzlich einen ASCII Dump und die zugehörigen Hexadecimal-Werte des TLS Negotiation-Prozesses mitloggen. | ||
+ | * **4** Den kompletten Verkehr nach dem STARTTLS als ASCII Dump und die zugehörigen Hexadecimal-Werte mitloggen. | ||
+ | |||
+ | <WRAP center round info> | ||
+ | Im Normalbetrieb werden " | ||
+ | </ | ||
+ | <code bash># Django : 2014-10-19 - Logging der TLS-Infomationen zu den Verbindungen im | ||
+ | # Maillog des SMTP-Daemons für den ankommenden SMTP-Verkehr. | ||
+ | # http:// | ||
+ | # default: smtpd_tls_loglevel = 0 | ||
+ | smtpd_tls_loglevel = 1</ | ||
+ | |||
+ | === TLS-Logging beim Mailversand === | ||
+ | Mit Hilfe der Option **smtp_tls_loglevel** kann das Logging des SMTP Clients beeinflusst werden. Bei den einzelnen Loglevel schließt ein höherer Loglevel entsprechend niedrigere jeweils mit ein. | ||
+ | * **0** TLS-Logging deaktiviert (Defaultwert) | ||
+ | * **1** Pro Verbindung wird eine Logzeile mit der Zusammenfassung des TLS Handshakes erzeugt. Sofern die Überprüfung des Client Zertifiaktes nicht gefordert ist, wird keine Fehlermeldung zur Zertifikatskette des Clientzertifikates erzeugt. | ||
+ | * **2** Zusätzlich die TLS Negotiation loggen. | ||
+ | * **3** Zusätzlich einen ASCII Dump und die zugehörigen Hexadecimal-Werte des TLS Negotiation-Prozesses mitloggen. | ||
+ | * **4** Den kompletten Verkehr nach dem STARTTLS als ASCII Dump und die zugehörigen Hexadecimal-Werte mitloggen. | ||
+ | |||
+ | <WRAP center round info> | ||
+ | Im Normalbetrieb werden " | ||
+ | </ | ||
+ | <code bash># Django : 2014-10-19 - Logging der TLS-Infomationen zu den Verbindungen im | ||
+ | # Maillog des SMTP-Clients für den ausgehenden SMTP-Verkehr. | ||
+ | # http:// | ||
+ | # default: smtp_tls_loglevel = 0 | ||
+ | smtp_tls_loglevel = 1</ | ||
+ | |||
+ | |||
+ | ===== Konfiguration aktivieren ===== | ||
+ | Zum Aktivieren unserer SSL/ | ||
+ | # systemctl restart postfix.service | ||
+ | |||
+ | ===== Postfix Verbindungstests ===== | ||
+ | ==== erster Test ==== | ||
+ | Als erstes kontrollieren wir, ob unser MX nun **// | ||
+ | # telnet ::1 25 | ||
+ | < | ||
+ | Connected to ::1. | ||
+ | Escape character is ' | ||
+ | 220 mx01.nausch.org ESMTP Postfix | ||
+ | EHLO foo | ||
+ | 250-mx01.nausch.org | ||
+ | 250-PIPELINING | ||
+ | 250-SIZE 52428800 | ||
+ | 250-ETRN | ||
+ | 250-STARTTLS | ||
+ | 250-ENHANCEDSTATUSCODES | ||
+ | 250 8BITMIME | ||
+ | quit | ||
+ | 221 2.0.0 Bye | ||
+ | Connection closed by foreign host. | ||
+ | </ | ||
+ | |||
+ | Unser Server bietet also nun TLS an; wir sehen dies an der Rückmeldung **250-STARTTLS**. | ||
+ | |||
+ | ==== zweiter Verbindungstest ==== | ||
+ | Als nächstes verbinden wir uns unter Einbeziehung von OpenSSL mit unserem Mailserver via telnet auf Port 25: | ||
+ | $ openssl s_client -starttls smtp -connect mx01.nausch.org: | ||
+ | < | ||
+ | depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA | ||
+ | verify return:1 | ||
+ | depth=1 C = US, O = " | ||
+ | verify return:1 | ||
+ | depth=0 serialNumber = 3S7x2lcbYiAccKZPoha0MSwP5hNsuSTP, | ||
+ | verify return:1 | ||
+ | --- | ||
+ | Certificate chain | ||
+ | 0 s:/ | ||
+ | | ||
+ | 1 s:/ | ||
+ | | ||
+ | 2 s:/ | ||
+ | | ||
+ | --- | ||
+ | Server certificate | ||
+ | -----BEGIN CERTIFICATE----- | ||
+ | MIIFKjCCBBKgAwIBAgIDEdPpMA0GCSqGSIb3DQEBCwUAMDwxCzAJBgNVBAYTAlVT | ||
+ | MRcwFQYDVQQKEw5HZW9UcnVzdCwgSW5jLjEUMBIGA1UEAxMLUmFwaWRTU0wgQ0Ew | ||
+ | HhcNMTQwNDA4MDMyNTAyWhcNMTYwNjAyMDEzODU0WjCBuzEpMCcGA1UEBRMgM1M3 | ||
+ | eDJsY2JZaUFjY0taUG9oYTBNU3dQNWhOc3VTVFAxEzARBgNVBAsTCkdUNDk0NDc5 | ||
+ | NTExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29tL3Jlc291cmNlcy9jcHMg | ||
+ | KGMpMTMxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZhbGlkYXRlZCAtIFJhcGlk | ||
+ | U1NMKFIpMRUwEwYDVQQDDAwqLm5hdXNjaC5vcmcwggEiMA0GCSqGSIb3DQEBAQUA | ||
+ | A4IBDwAwggEKAoIBAQDRhxUen7499yElJr2cOIPdg4u/ | ||
+ | oA1U+brU7XNpnRVA+QHk1aXTnROwGX46mlxacKOQPE0U9dXMRFrWfnCcOCgUqkjY | ||
+ | vQdivwKUOJqfJfef0Zun4C7LabfP/ | ||
+ | +T5jKrVsanfh2bN6WKgzwvmPaurpelA1f5ciiaWcuXtTc8Hrshyko30IeyIxAJ2J | ||
+ | aj3zHKEjuTMNn/ | ||
+ | HOBlYBkwnEawpsHS+nQVEc2d7CFCBWr2MCSQLQQvAgMBAAGjggGzMIIBrzAfBgNV | ||
+ | HSMEGDAWgBRraT1qGEJK3Y8CZTn9NSSGeJEWMDAOBgNVHQ8BAf8EBAMCBaAwHQYD | ||
+ | VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCMGA1UdEQQcMBqCDCoubmF1c2No | ||
+ | Lm9yZ4IKbmF1c2NoLm9yZzBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vcmFwaWRz | ||
+ | c2wtY3JsLmdlb3RydXN0LmNvbS9jcmxzL3JhcGlkc3NsLmNybDAdBgNVHQ4EFgQU | ||
+ | HjMj1hUDkcufmSmgDVeMt7sdoAkwDAYDVR0TAQH/ | ||
+ | MGowLQYIKwYBBQUHMAGGIWh0dHA6Ly9yYXBpZHNzbC1vY3NwLmdlb3RydXN0LmNv | ||
+ | bTA5BggrBgEFBQcwAoYtaHR0cDovL3JhcGlkc3NsLWFpYS5nZW90cnVzdC5jb20v | ||
+ | cmFwaWRzc2wuY3J0MEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUF | ||
+ | BwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqG | ||
+ | SIb3DQEBCwUAA4IBAQACZLmO7zRHC4zEXyXCHpIgZ/ | ||
+ | psebPpulKDr2Q6JYVPsS6z7sqw9SNCmVjeRngIgCpuih7DGUzrc7YzPw4vmGTgND | ||
+ | KTCQ8B3TqjYak3pG3LUUwsSIL1// | ||
+ | xsGzO1KW5olUX7J4IwZbnE5ZRrhF+UIRtj1yPx2fqXOBGuqGdhZ4pTrsY20e6mJJ | ||
+ | 4ZOK0RY0MFy1JN3cWAsL5mR3wZwLeUYXnwSHKqWHE0TjJcy5X6sLZP5IoOt61vu1 | ||
+ | 7Zv1GcT4i3a/ | ||
+ | -----END CERTIFICATE----- | ||
+ | subject=/ | ||
+ | issuer=/ | ||
+ | --- | ||
+ | No client certificate CA names sent | ||
+ | Server Temp Key: ECDH, secp384r1, 384 bits | ||
+ | --- | ||
+ | SSL handshake has read 4057 bytes and written 442 bytes | ||
+ | --- | ||
+ | New, TLSv1/ | ||
+ | Server public key is 2048 bit | ||
+ | Secure Renegotiation IS supported | ||
+ | Compression: | ||
+ | Expansion: NONE | ||
+ | SSL-Session: | ||
+ | Protocol | ||
+ | Cipher | ||
+ | Session-ID: 73C80E733671FD4E5012E569A1C6B8053DC7CCD7D5BAA7CB824A7608B14E0F87 | ||
+ | Session-ID-ctx: | ||
+ | Master-Key: 24BA85939899214B7F27361C9BE49B3BA8756F3FCBF6B504346CF4CD17445A26A0F91BF1495B35F632ECDEEAFD8A3F93 | ||
+ | Key-Arg | ||
+ | Krb5 Principal: None | ||
+ | PSK identity: None | ||
+ | PSK identity hint: None | ||
+ | TLS session ticket lifetime hint: 7200 (seconds) | ||
+ | TLS session ticket: | ||
+ | 0000 - a1 0e 3f 20 a4 82 fc 58-2e 40 23 06 99 ac 5a d1 ..? ...X.@# | ||
+ | 0010 - 86 06 3a 5c 57 99 91 70-6a df ec ba 04 65 43 a5 | ||
+ | 0020 - 45 03 af 61 3d 59 10 f8-eb 6a 94 aa 4c b7 50 82 | ||
+ | 0030 - b6 ca a1 be 4f 10 fa 67-a5 90 fa f9 92 fe 3c 79 | ||
+ | 0040 - 57 bf 34 22 83 47 db f7-5c 8e fc 5b d5 25 f4 47 | ||
+ | 0050 - 16 cf 5c 05 f9 0d 96 aa-92 9d 11 ff 68 dc 56 3b | ||
+ | 0060 - 8e 02 99 79 a1 ba 31 68-38 91 1e 4e 51 94 aa 64 | ||
+ | 0070 - 0a 73 fd 0f b3 e2 74 ab-71 ed ad 2e 5d e8 ac 7c | ||
+ | 0080 - 41 6e d1 2c 7a 28 30 98-b1 33 3b 34 55 34 b4 30 | ||
+ | 0090 - 23 30 69 4b ac 01 76 5d-5f c9 6a 42 14 0c 05 d8 # | ||
+ | |||
+ | Start Time: 1414359330 | ||
+ | Timeout | ||
+ | Verify return code: 0 (ok) | ||
+ | --- | ||
+ | 250 DSN | ||
+ | quit | ||
+ | 221 2.0.0 Bye | ||
+ | closed | ||
+ | </ | ||
+ | |||
+ | Im obigen Beispiel sehen wir, dass: | ||
+ | * **Protokoll**: | ||
+ | * **Cipher** | ||
+ | und als temporärer Server-Key **ECDH, secp384r1, 384 bits** verwendet wurden. | ||
+ | |||
+ | Die Verbindung wurde uns im Maillog entsprechend positiv quittiert: | ||
+ | < | ||
+ | Oct 26 22:35:30 vml000087 postfix/ | ||
+ | Oct 26 22:35:34 vml000087 postfix/ | ||
+ | </ | ||
+ | |||
+ | ==== 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 **// | ||
+ | |||
+ | |||
+ | ==== testssl ==== | ||
+ | Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https:// | ||
+ | |||
+ | Das Shell-Script basiert auf den openssl-Bibliotheken und wird auf **[[https:// | ||
+ | |||
+ | Zum Testen unseres SMTP-Servers nutzen wir nachfolgenden Aufruf. | ||
+ | # testssl.sh --starttls smtp 10.0.0.87: | ||
+ | |||
+ | Als Ergebnis erhalten wir eine ausführliche Aufstellung zum TLS-Gesundheitszustandes unseres Servers. | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <font style=" | ||
+ | < | ||
+ | testssl.sh | ||
+ | (</ | ||
+ | |||
+ | This program is free software. Distribution and | ||
+ | | ||
+ | USAGE w/o ANY WARRANTY. USE IT AT YOUR OWN RISK! | ||
+ | |||
+ | | ||
+ | |||
+ | ########################################################### | ||
+ | </b> | ||
+ | Using " | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | <font style=" | ||
+ | |||
+ | rDNS (10.0.0.87): | ||
+ | | ||
+ | <font style=" | ||
+ | |||
+ | <b> SSLv2 </ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | SHA256 AE3368DBD3199A34402C46636F4207EBC3235D84398C9F5C598AF737D1F4E690</ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | 29)"> | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | EDH-RSA-DES-CBC3-SHA DES-CBC3-SHA</ | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | |||
+ | Hexcode | ||
+ | ------------------------------------------------------------------------- | ||
+ | <font style=" | ||
+ | |||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | <font style=" | ||
+ | |||
+ | |||
+ | <font style=" | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== ssl-tools.net ==== | ||
+ | |||
+ | Für eine sichere Verschlüsselung beim eMailtransport muss der Mailserver STARTTLS unterstützen. Ein vertrauenswürdiges SSL-Zertifikat sollte ebenso wie DANE zum Einsatz kommen. Selbstredend darf der Server nicht für Heartbleed anfällig sein und Perfect Forward Secrecy unterstützen. | ||
+ | |||
+ | All diese Dinge lassen sich über die Testseite https:// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== eMail-Verkehr ==== | ||
+ | Der verschlüsselte Transportweg wird in der Headerzeilen einer eMail entsprechend vermerkt: | ||
+ | < | ||
+ | by mx1.nausch.org (Postfix) with ESMTP for < | ||
+ | Auch im **Maillog** wird die gesicherte Kommunikation protokolliert: | ||
+ | < | ||
+ | Mar 26 23:40:40 nss postfix/ | ||
+ | Mar 26 23:40:52 nss postfix/ | ||
+ | |||
+ | ==== TLS-Verkehrsstatistik ==== | ||
+ | Bei bedarf können wir uns bei unserem Mailserver, mit Hilfe der nachfolgenden Befehle, einen Überblick über Anzahl und Art der einzelnen TLS-Verbindungen anzeigen lassen. | ||
+ | |||
+ | === ankommender TLS-Verkehr === | ||
+ | # grep 'TLS connection established from' / | ||
+ | |||
+ | < | ||
+ | | ||
+ | |||
+ | === ausgehender TLS-Verkehr === | ||
+ | # grep 'TLS connection established to' / | ||
+ | |||
+ | < | ||
+ | 3323 TLSv1.1 | ||
+ | | ||
+ | |||
+ | === graphische Übersicht des TLS-Clientverkehrs === | ||
+ | Eine fortlaufende Übersicht der ausgehenden Verbindungen kann man sich mit Hilfe von **[[centos: | ||
+ | |||
+ | {{ : | ||
+ | ====== Links ====== | ||
+ | * **⇐ [[centos: | ||
+ | * **⇒ [[centos: | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||
+ | |||