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, verschlüsselte Kommunikation für Postfix 2.11 unter CentOS 7 ======
 +{{:centos:world.png?nolink&80 |Bild: Weltkugel }} \\
 +Dass das Internet systembedingt unsicher ist, hat sich in aller Regel herumgesprochen.  Daten durchlaufen von der Quelle bis zum Ziel zahlreiche Server und Systeme, an denen die Daten, abgegriffen und/oder manipuliert werden können. Persönliche und vertrauliche Daten können so einfach Dritten in die Hände fallen, die mit grosser krimineller Energie versuchen an diese Daten zu kommen. 
 +
 +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. 
 +{{ :centos:ausrufezeichen.png?nolink&80|Bild: Ausrufezeichen}} Seit Jahren werden unschuldige Bürgerinnen und Bürger von staatlichen Institutionen unter Generalverdacht gestellt und überwacht! Regierungen scheuen keinen Aufwand um in die Privatsphäre unschuldiger Bürgerinnen und Bürger einzudringen, Daten auszulesen und auszuwerten!
 +
 +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, dass Empfänger vertrauen können, dass Informationen tatsächlich von dem versandt wurden, von dem wir glauben, diese zu bekommen.
 +
 +Nicht nur auf [[centos:openpgp_beim_mua|Seiten der Endkunden]], die mit Hilfe von [[http://www.openpgp.org/|OpenPGP]] oder [[http://www.smime.org/|S/MIME]] vertraulich kommunizieren, sondern auch serverseitig kann der Übertragungsweg mit einfachen Mitteln entsprechend verschlüsselt werden. {{:centos:mailserver:lan_security.png?96 |SSL/TLS Logo}} Für die vertrauliche Kommunikation zwischen unseren Usern und unserm [[centos:mailserver:start|Postfix-Mailserver]], wie auch zwischen fremden Postfix bietet sich eine verschlüsselte Kommunikation mit Hilfe von **SSL/TLS** an.
 +
 +Mit Hilfe von **[[centos:mail_c7:mta_5?&#perfect_forward_secrecy|PFS]]**((**P**erfect **F**orward **S**ecrecy)) können wir leicht und einfach sicherstellen, dass aufgezeichnete Datenströme im nachhinein nicht entschlüsselt werden können. Dies wird erreicht, da die beiden Kommunikationspartner, einen separaten und individuellen temporären Schlüssel zur Datensicherung verwenden. Dieser Schlüssel ist dabei nicht fix, sondern wird bei jeder Verbindung neu ausgehandelt. Da aber der Schlüssel an sich nicht ausgetauscht werden muss, ist es auch nicht möglich, den eventuell aufgezeichneten Datenstrom zu entschlüsseln, da der dazu benötigte Schlüssel nicht im Datenstrom enthalten war. 
 +
 +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 //Schlüssel// und //Zertifikate// erstellen wir mittels [[http://www.openssl.org|OpenSSL]], einer freien Implementierung von **SSL**((**S**ecure **S**ockets **L**ayer)). **SSL** oder **TLS**((**T**ransport **L**ayer **S**ecurity)) ist ein hybrides Verschlüsselungsprotokoll zur Datenübertragung im Internet. Unter TLS 1.0, 1.1 und 1.2 versteht man die standardisierten Weiterentwicklungen von SSL 3.0 (TLS 1.0 steht neu für SSL 3.1). Dies bedeutet also, SSL wird nun unter dem Namen TLS weiterentwickelt.
 +
 + 
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +===== 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
 +
 +   Installed Packages
 +   openssl.x86_64                                  1:1.0.1e-34.el7_0.6
 +
 +Sollte das Paket noch fehlen, installieren wir dies einfach via:
 +   # yum install openssl
 +Was uns das Paket **//openssl//** alles mitbringt und wohin die Programme und Konfigurationsdateien kopiert werden, offenbart uns das System wie folgt.
 +   # rpm -qil openssl
 +<code>Name        : openssl
 +Epoch       : 1
 +Version     : 1.0.1e
 +Release     : 34.el7_0.6
 +Architecture: x86_64
 +Install Date: Sat 18 Oct 2014 09:55:41 AM CEST
 +Group       : System Environment/Libraries                                                                                                                                       
 +Size        : 1610001                                                                                                                                                            
 +License     : OpenSSL                                                                                                                                                            
 +Signature   : RSA/SHA256, Thu 16 Oct 2014 06:06:46 PM CEST, Key ID 24c6a8a7f4a80eb5                                                                                              
 +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    : CentOS BuildSystem <http://bugs.centos.org>                                                                                                                        
 +Vendor      : CentOS                                                                                                                                                             
 +URL         : http://www.openssl.org/                                                                                                                                            
 +Summary     : Utilities from the general purpose cryptography library with TLS implementation                                                                                    
 +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
 +/etc/pki/CA/certs
 +/etc/pki/CA/crl
 +/etc/pki/CA/newcerts
 +/etc/pki/CA/private
 +/etc/pki/tls/certs/Makefile
 +/etc/pki/tls/certs/make-dummy-cert
 +/etc/pki/tls/certs/renew-dummy-cert
 +/etc/pki/tls/misc/CA
 +/etc/pki/tls/misc/c_hash
 +/etc/pki/tls/misc/c_info
 +/etc/pki/tls/misc/c_issuer
 +/etc/pki/tls/misc/c_name
 +/usr/bin/openssl
 +/usr/share/doc/openssl-1.0.1e
 +/usr/share/doc/openssl-1.0.1e/CHANGES
 +/usr/share/doc/openssl-1.0.1e/FAQ
 +/usr/share/doc/openssl-1.0.1e/INSTALL
 +/usr/share/doc/openssl-1.0.1e/LICENSE
 +/usr/share/doc/openssl-1.0.1e/NEWS
 +/usr/share/doc/openssl-1.0.1e/README
 +/usr/share/doc/openssl-1.0.1e/README.FIPS
 +/usr/share/doc/openssl-1.0.1e/c-indentation.el
 +/usr/share/doc/openssl-1.0.1e/openssl.txt
 +/usr/share/doc/openssl-1.0.1e/openssl_button.gif
 +/usr/share/doc/openssl-1.0.1e/openssl_button.html
 +/usr/share/doc/openssl-1.0.1e/ssleay.txt
 +/usr/share/man/man1/asn1parse.1ssl.gz
 +/usr/share/man/man1/ca.1ssl.gz
 +/usr/share/man/man1/ciphers.1ssl.gz
 +/usr/share/man/man1/cms.1ssl.gz
 +/usr/share/man/man1/crl.1ssl.gz
 +/usr/share/man/man1/crl2pkcs7.1ssl.gz
 +/usr/share/man/man1/dgst.1ssl.gz
 +/usr/share/man/man1/dhparam.1ssl.gz
 +/usr/share/man/man1/dsa.1ssl.gz
 +/usr/share/man/man1/dsaparam.1ssl.gz
 +/usr/share/man/man1/ec.1ssl.gz
 +/usr/share/man/man1/ecparam.1ssl.gz
 +/usr/share/man/man1/enc.1ssl.gz
 +/usr/share/man/man1/errstr.1ssl.gz
 +/usr/share/man/man1/gendsa.1ssl.gz
 +/usr/share/man/man1/genpkey.1ssl.gz
 +/usr/share/man/man1/genrsa.1ssl.gz
 +/usr/share/man/man1/md2.1ssl.gz
 +/usr/share/man/man1/md4.1ssl.gz
 +/usr/share/man/man1/md5.1ssl.gz
 +/usr/share/man/man1/mdc2.1ssl.gz
 +/usr/share/man/man1/nseq.1ssl.gz
 +/usr/share/man/man1/ocsp.1ssl.gz
 +/usr/share/man/man1/openssl.1ssl.gz
 +/usr/share/man/man1/pkcs12.1ssl.gz
 +/usr/share/man/man1/pkcs7.1ssl.gz
 +/usr/share/man/man1/pkcs8.1ssl.gz
 +/usr/share/man/man1/pkey.1ssl.gz
 +/usr/share/man/man1/pkeyparam.1ssl.gz
 +/usr/share/man/man1/pkeyutl.1ssl.gz
 +/usr/share/man/man1/req.1ssl.gz
 +/usr/share/man/man1/ripemd160.1ssl.gz
 +/usr/share/man/man1/rsa.1ssl.gz
 +/usr/share/man/man1/rsautl.1ssl.gz
 +/usr/share/man/man1/s_client.1ssl.gz
 +/usr/share/man/man1/s_server.1ssl.gz
 +/usr/share/man/man1/s_time.1ssl.gz
 +/usr/share/man/man1/sess_id.1ssl.gz
 +/usr/share/man/man1/sha.1ssl.gz
 +/usr/share/man/man1/sha1.1ssl.gz
 +/usr/share/man/man1/smime.1ssl.gz
 +/usr/share/man/man1/speed.1ssl.gz
 +/usr/share/man/man1/spkac.1ssl.gz
 +/usr/share/man/man1/sslpasswd.1ssl.gz
 +/usr/share/man/man1/sslrand.1ssl.gz
 +/usr/share/man/man1/ts.1ssl.gz
 +/usr/share/man/man1/tsget.1ssl.gz
 +/usr/share/man/man1/verify.1ssl.gz
 +/usr/share/man/man1/version.1ssl.gz
 +/usr/share/man/man1/x509.1ssl.gz
 +/usr/share/man/man5/config.5ssl.gz
 +/usr/share/man/man5/openssl.cnf.5ssl.gz
 +/usr/share/man/man5/x509v3_config.5ssl.gz
 +/usr/share/man/man7/des_modes.7ssl.gz
 +</code>
 +
 +==== 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
 +<code>ECDHE-RSA-AES256-GCM-SHA384   TLSv1.2 Kx=ECDH       Au=RSA   Enc=AESGCM(256)   Mac=AEAD
 +ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH       Au=ECDSA Enc=AESGCM(256)   Mac=AEAD
 +ECDHE-RSA-AES256-SHA384       TLSv1.2 Kx=ECDH       Au=RSA   Enc=AES(256)      Mac=SHA384
 +ECDHE-ECDSA-AES256-SHA384     TLSv1.2 Kx=ECDH       Au=ECDSA Enc=AES(256)      Mac=SHA384
 +ECDHE-RSA-AES256-SHA          SSLv3   Kx=ECDH       Au=RSA   Enc=AES(256)      Mac=SHA1
 +ECDHE-ECDSA-AES256-SHA        SSLv3   Kx=ECDH       Au=ECDSA Enc=AES(256)      Mac=SHA1
 +DHE-DSS-AES256-GCM-SHA384     TLSv1.2 Kx=DH         Au=DSS   Enc=AESGCM(256)   Mac=AEAD
 +DHE-RSA-AES256-GCM-SHA384     TLSv1.2 Kx=DH         Au=RSA   Enc=AESGCM(256)   Mac=AEAD
 +DHE-RSA-AES256-SHA256         TLSv1.2 Kx=DH         Au=RSA   Enc=AES(256)      Mac=SHA256
 +DHE-DSS-AES256-SHA256         TLSv1.2 Kx=DH         Au=DSS   Enc=AES(256)      Mac=SHA256
 +DHE-RSA-AES256-SHA            SSLv3   Kx=DH         Au=RSA   Enc=AES(256)      Mac=SHA1
 +DHE-DSS-AES256-SHA            SSLv3   Kx=DH         Au=DSS   Enc=AES(256)      Mac=SHA1
 +DHE-RSA-CAMELLIA256-SHA       SSLv3   Kx=DH         Au=RSA   Enc=Camellia(256) Mac=SHA1
 +DHE-DSS-CAMELLIA256-SHA       SSLv3   Kx=DH         Au=DSS   Enc=Camellia(256) Mac=SHA1
 +ECDH-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH/RSA   Au=ECDH  Enc=AESGCM(256)   Mac=AEAD
 +ECDH-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH/ECDSA Au=ECDH  Enc=AESGCM(256)   Mac=AEAD
 +ECDH-RSA-AES256-SHA384        TLSv1.2 Kx=ECDH/RSA   Au=ECDH  Enc=AES(256)      Mac=SHA384
 +ECDH-ECDSA-AES256-SHA384      TLSv1.2 Kx=ECDH/ECDSA Au=ECDH  Enc=AES(256)      Mac=SHA384
 +ECDH-RSA-AES256-SHA           SSLv3   Kx=ECDH/RSA   Au=ECDH  Enc=AES(256)      Mac=SHA1
 +ECDH-ECDSA-AES256-SHA         SSLv3   Kx=ECDH/ECDSA Au=ECDH  Enc=AES(256)      Mac=SHA1
 +AES256-GCM-SHA384             TLSv1.2 Kx=RSA        Au=RSA   Enc=AESGCM(256)   Mac=AEAD
 +AES256-SHA256                 TLSv1.2 Kx=RSA        Au=RSA   Enc=AES(256)      Mac=SHA256
 +AES256-SHA                    SSLv3   Kx=RSA        Au=RSA   Enc=AES(256)      Mac=SHA1
 +CAMELLIA256-SHA               SSLv3   Kx=RSA        Au=RSA   Enc=Camellia(256) Mac=SHA1
 +PSK-AES256-CBC-SHA            SSLv3   Kx=PSK        Au=PSK   Enc=AES(256)      Mac=SHA1
 +ECDHE-RSA-AES128-GCM-SHA256   TLSv1.2 Kx=ECDH       Au=RSA   Enc=AESGCM(128)   Mac=AEAD
 +ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH       Au=ECDSA Enc=AESGCM(128)   Mac=AEAD
 +ECDHE-RSA-AES128-SHA256       TLSv1.2 Kx=ECDH       Au=RSA   Enc=AES(128)      Mac=SHA256
 +ECDHE-ECDSA-AES128-SHA256     TLSv1.2 Kx=ECDH       Au=ECDSA Enc=AES(128)      Mac=SHA256
 +ECDHE-RSA-AES128-SHA          SSLv3   Kx=ECDH       Au=RSA   Enc=AES(128)      Mac=SHA1
 +ECDHE-ECDSA-AES128-SHA        SSLv3   Kx=ECDH       Au=ECDSA Enc=AES(128)      Mac=SHA1
 +DHE-DSS-AES128-GCM-SHA256     TLSv1.2 Kx=DH         Au=DSS   Enc=AESGCM(128)   Mac=AEAD
 +DHE-RSA-AES128-GCM-SHA256     TLSv1.2 Kx=DH         Au=RSA   Enc=AESGCM(128)   Mac=AEAD
 +DHE-RSA-AES128-SHA256         TLSv1.2 Kx=DH         Au=RSA   Enc=AES(128)      Mac=SHA256
 +DHE-DSS-AES128-SHA256         TLSv1.2 Kx=DH         Au=DSS   Enc=AES(128)      Mac=SHA256
 +DHE-RSA-AES128-SHA            SSLv3   Kx=DH         Au=RSA   Enc=AES(128)      Mac=SHA1
 +DHE-DSS-AES128-SHA            SSLv3   Kx=DH         Au=DSS   Enc=AES(128)      Mac=SHA1
 +ECDHE-RSA-DES-CBC3-SHA        SSLv3   Kx=ECDH       Au=RSA   Enc=3DES(168)     Mac=SHA1
 +ECDHE-ECDSA-DES-CBC3-SHA      SSLv3   Kx=ECDH       Au=ECDSA Enc=3DES(168)     Mac=SHA1
 +DHE-RSA-SEED-SHA              SSLv3   Kx=DH         Au=RSA   Enc=SEED(128)     Mac=SHA1
 +DHE-DSS-SEED-SHA              SSLv3   Kx=DH         Au=DSS   Enc=SEED(128)     Mac=SHA1
 +DHE-RSA-CAMELLIA128-SHA       SSLv3   Kx=DH         Au=RSA   Enc=Camellia(128) Mac=SHA1
 +DHE-DSS-CAMELLIA128-SHA       SSLv3   Kx=DH         Au=DSS   Enc=Camellia(128) Mac=SHA1
 +EDH-RSA-DES-CBC3-SHA          SSLv3   Kx=DH         Au=RSA   Enc=3DES(168)     Mac=SHA1
 +EDH-DSS-DES-CBC3-SHA          SSLv3   Kx=DH         Au=DSS   Enc=3DES(168)     Mac=SHA1
 +ECDH-RSA-AES128-GCM-SHA256    TLSv1.2 Kx=ECDH/RSA   Au=ECDH  Enc=AESGCM(128)   Mac=AEAD
 +ECDH-ECDSA-AES128-GCM-SHA256  TLSv1.2 Kx=ECDH/ECDSA Au=ECDH  Enc=AESGCM(128)   Mac=AEAD
 +ECDH-RSA-AES128-SHA256        TLSv1.2 Kx=ECDH/RSA   Au=ECDH  Enc=AES(128)      Mac=SHA256
 +ECDH-ECDSA-AES128-SHA256      TLSv1.2 Kx=ECDH/ECDSA Au=ECDH  Enc=AES(128)      Mac=SHA256
 +ECDH-RSA-AES128-SHA           SSLv3   Kx=ECDH/RSA   Au=ECDH  Enc=AES(128)      Mac=SHA1
 +ECDH-ECDSA-AES128-SHA         SSLv3   Kx=ECDH/ECDSA Au=ECDH  Enc=AES(128)      Mac=SHA1
 +ECDH-RSA-DES-CBC3-SHA         SSLv3   Kx=ECDH/RSA   Au=ECDH  Enc=3DES(168)     Mac=SHA1
 +ECDH-ECDSA-DES-CBC3-SHA       SSLv3   Kx=ECDH/ECDSA Au=ECDH  Enc=3DES(168)     Mac=SHA1
 +AES128-GCM-SHA256             TLSv1.2 Kx=RSA        Au=RSA   Enc=AESGCM(128)   Mac=AEAD
 +AES128-SHA256                 TLSv1.2 Kx=RSA        Au=RSA   Enc=AES(128)      Mac=SHA256
 +AES128-SHA                    SSLv3   Kx=RSA        Au=RSA   Enc=AES(128)      Mac=SHA1
 +SEED-SHA                      SSLv3   Kx=RSA        Au=RSA   Enc=SEED(128)     Mac=SHA1
 +CAMELLIA128-SHA               SSLv3   Kx=RSA        Au=RSA   Enc=Camellia(128) Mac=SHA1
 +DES-CBC3-SHA                  SSLv3   Kx=RSA        Au=RSA   Enc=3DES(168)     Mac=SHA1
 +IDEA-CBC-SHA                  SSLv3   Kx=RSA        Au=RSA   Enc=IDEA(128)     Mac=SHA1
 +PSK-AES128-CBC-SHA            SSLv3   Kx=PSK        Au=PSK   Enc=AES(128)      Mac=SHA1
 +PSK-3DES-EDE-CBC-SHA          SSLv3   Kx=PSK        Au=PSK   Enc=3DES(168)     Mac=SHA1
 +KRB5-IDEA-CBC-SHA             SSLv3   Kx=KRB5       Au=KRB5  Enc=IDEA(128)     Mac=SHA1
 +KRB5-DES-CBC3-SHA             SSLv3   Kx=KRB5       Au=KRB5  Enc=3DES(168)     Mac=SHA1
 +KRB5-IDEA-CBC-MD5             SSLv3   Kx=KRB5       Au=KRB5  Enc=IDEA(128)     Mac=MD5 
 +KRB5-DES-CBC3-MD5             SSLv3   Kx=KRB5       Au=KRB5  Enc=3DES(168)     Mac=MD5 
 +ECDHE-RSA-RC4-SHA             SSLv3   Kx=ECDH       Au=RSA   Enc=RC4(128)      Mac=SHA1
 +ECDHE-ECDSA-RC4-SHA           SSLv3   Kx=ECDH       Au=ECDSA Enc=RC4(128)      Mac=SHA1
 +ECDH-RSA-RC4-SHA              SSLv3   Kx=ECDH/RSA   Au=ECDH  Enc=RC4(128)      Mac=SHA1
 +ECDH-ECDSA-RC4-SHA            SSLv3   Kx=ECDH/ECDSA Au=ECDH  Enc=RC4(128)      Mac=SHA1
 +RC4-SHA                       SSLv3   Kx=RSA        Au=RSA   Enc=RC4(128)      Mac=SHA1
 +RC4-MD5                       SSLv3   Kx=RSA        Au=RSA   Enc=RC4(128)      Mac=MD5 
 +PSK-RC4-SHA                   SSLv3   Kx=PSK        Au=PSK   Enc=RC4(128)      Mac=SHA1
 +KRB5-RC4-SHA                  SSLv3   Kx=KRB5       Au=KRB5  Enc=RC4(128)      Mac=SHA1
 +KRB5-RC4-MD5                  SSLv3   Kx=KRB5       Au=KRB5  Enc=RC4(128)      Mac=MD5
 +</code>
 +
 +Wir haben also mit der aktuellen Version von OpenSSL, den für //**Perfect Forward Secrecy**// benötigten kryptographischen Algorithmus **[[centos:mail_c7:mta_5?&#perfect_forward_secrecy|DH]]**((**D**iffie **H**ellmann)) sowie den weiterentwickelten **[[centos:mail_c7:mta_5?&#perfect_forward_secrecy|ECDH]]**((**E**lliptic **C**urve **D**iffie **H**ellmann)).
 +
 +=== Enhanced Diffie Hellman Keys ===
 +Bei der [[centos:mail_c7:mta_2|Postfix-Installation]] wurden vordefinierte Schlüssel mitgeliefert, die jedoch bei den RPM-Installation mit diesem Paket gleich sind. Also werden wir uns nun erst einmal passende Diffie-Hellmann-Schlüsselparameterdatei generieren. Als erstes einen 512-bit Schlüssel (export ciphers), der jedoch "nur" noch für die obsoleten "Export"-Ciphers verwendet wird. Des weiteren generieren wir noch einen 1024-bit und einen 2048-bit (non export ciphers) Schlüssel, die für all die anderen //EDH Cipher Suits// verwendet werden.
 +
 +   # openssl dhparam -out /etc/pki/postfix/private/dh_512.pem -2 512
 +<code>Generating DH parameters, 512 bit long safe prime, generator 2
 +This is going to take a long time
 +......+...........+.......+.........................+......+.+........+.....+.........+......................................++*++*++*++*++*++*
 +</code>
 +   # openssl dhparam -out /etc/pki/postfix/private/dh_1024.pem -2 1024
 +<code>Generating DH parameters, 1024 bit long safe prime, generator 2
 +This is going to take a long time
 +...............................+............+............................................................+........+.......+.................+.........................+........+......+.......+.........................................+...................+............................+...............................+...............+.............+.+.........+....+............+............+................................+.........+....+.+..+.................+......................................................+.............+.+..................+.............................................................................................................+......+........+.........................................................................................................................................................+...........+........................+..............+.................................+.......+........+................................+...............+..................+.........................................+..........................+............+..........................+..............................+............................+...+................+.....+.................+.++*++*++*++*++*++*</code>
 +   # openssl dhparam -out /etc/pki/postfix/private/dh_2048.pem -2 2048
 +<code>Generating DH parameters, 1024 bit long safe prime, generator 2
 +This is going to take a long time
 +...........+..............................................................+.................+........................................................................................................................................................................................................................+...................................................................+..................................................................+...........................+....................................................................................................................+........+.................+.................................................................................................+...........+...................+.......................................................................................................+++...................................+....+................................................+.....................................+...............+.....+.............................+.+.........................+.........................+....................................+...................................................................................+..................+............+...............................+.........................................................................................+..............+.................................+.............+................................................................+.....+..............+.........+.............+..............................................+..............+................................++*++*++*
 +</code>
 +
 +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 /etc/pki/tls/tmp
 +
 +   # vim edh_keygen
 +<file bash edh_keygen>#!/bin/bash
 +# Script zum Erstellen der Diffie Hellman Schlüssel
 +# Django <django@nausch.org> (c) 2015
 +cd /etc/pki/tls/tmp
 +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
 +/usr/bin/rsync /etc/pki/tls/tmp/*.pem /etc/pki/tls/private/
 +rm *.pem -f
 +systemctl condrestart postfix</file>
 +
 +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 **///etc/cron.daily//** verschieben, können wir einfach einmal am Tag neu generierte Schlüssel generieren und auch verwenden!
 +</WRAP>
 +   # mv edh_keygen /etc/cron.daily/
 +
 +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:25 -cipher "EDH" 2>/dev/null | grep -ie "Server .* key"
 +
 +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 "offiziellen" oder besser gesagt einer kommerziellen CA nicht von Zertifikaten einer eigenen "self signed" Zertifikaten. In aller Regel wird dies abhängig davon sein, ob die verwendeten Zertifikate anstandslos von den Clientprogrammen (Mailclients und ggf. Browser) beim Endnutzer akzeptiert werden, also von einer vertrauenswürdigen CA stammen. 
 +
 +Egal welchen Weg wir hier gehen können oder müssen, zur Absicherung unserer Kommunikation benötigen wir drei Dinge:
 +  - unseren //**[[centos:mail_c7:mta_5?&#schluessel_fuer_das_serverzertifikat_erzeugen|Private Key]]**//, den wir hüten wie unseren Augapfel
 +  - unseren //**[[centos:mail_c7:mta_5?&#certificate_signing_request_erzeugen|Public Key mit zusätzlichen Daten]]**// , auch bekannt als **[[http://de.wikipedia.org/wiki/Certificate_Signing_Request|CSR]]**((**C**ertificate **S**igning **R**equest)), den wir von einer **CA**((**C**ertification **A**uthority)) signieren lassen. Dies ist das **[[http://de.wikipedia.org/wiki/Public-Key-Zertifikat|Zertifikat]]**, welches wir von unserer eigenen CA oder auch eine der vielen kommerziellen erhalten, und
 +  - 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:mail_c7:mta_5?&#schluessel_fuer_das_serverzertifikat_erzeugen|Kapitel]] getrost überspringen und gleich damit starten, den nötigen Schlüssel für unser Zertifikat/CSR zu erstellen. 
 +
 +=== 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, gehen wir die Schritte kurz manuell durch. Das vorgenante Script aus dem Jahre '96 :-? findet man im Übrigen sonderbarer Weise unter **/etc/pki/tls/misc/CA**.
 +  # cat /etc/pki/tls/misc/CA
 +<file bash /etc/pki/tls/misc/CA>#!/bin/sh
 +#
 +# 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 'ssleay cmd' instead of 'cmd'.
 +# 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 <$infile;
 +    while read line; do
 + if [ $flag -eq 1 ]; then
 + echo $line|grep "^-----END.*$bound"  2>/dev/null 1>/dev/null
 + if [ $? -eq 0 ] ; then
 + echo $line >>$outfile
 + break
 + else
 + echo $line >>$outfile
 + fi
 + fi
 +
 + echo $line|grep "^-----BEGIN.*$bound"  2>/dev/null 1>/dev/null
 + if [ $? -eq 0 ]; then
 + echo $line >$outfile
 + flag=1
 + fi
 +    done
 +}
 +
 +usage() {
 + echo "usage: $0 -newcert|-newreq|-newreq-nodes|-newca|-sign|-verify" >&2
 +}
 +
 +if [ -z "$OPENSSL" ]; then OPENSSL=openssl; fi
 +
 +if [ -z "$DAYS" ] ; then DAYS="-days 365" ; fi # 1 year
 +CADAYS="-days 1095" # 3 years
 +REQ="$OPENSSL req $SSLEAY_CONFIG"
 +CA="$OPENSSL ca $SSLEAY_CONFIG"
 +VERIFY="$OPENSSL verify"
 +X509="$OPENSSL x509"
 +PKCS12="openssl pkcs12"
 +
 +if [ -z "$CATOP" ] ; then CATOP=/etc/pki/CA ; fi
 +CAKEY=./cakey.pem
 +CAREQ=./careq.pem
 +CACERT=./cacert.pem
 +
 +RET=0
 +
 +while [ "$1" != "" ] ; do
 +case $1 in
 +-\?|-h|-help)
 +    usage
 +    exit 0
 +    ;;
 +-newcert)
 +    # create a certificate
 +    $REQ -new -x509 -keyout newkey.pem -out newcert.pem $DAYS
 +    RET=$?
 +    echo "Certificate is in newcert.pem, private key is in newkey.pem"
 +    ;;
 +-newreq)
 +    # create a certificate request
 +    $REQ -new -keyout newkey.pem -out newreq.pem $DAYS
 +    RET=$?
 +    echo "Request is in newreq.pem, private key is in newkey.pem"
 +    ;;
 +-newreq-nodes) 
 +    # create a certificate request
 +    $REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
 +    RET=$?
 +    echo "Request (and private key) is in newreq.pem"
 +    ;;
 +-newca)
 +    # if explicitly asked for or it doesn't exist then setup the directory
 +    # structure that Eric likes to manage things
 +    NEW="1"
 +    if [ "$NEW" -o ! -f ${CATOP}/serial ]; then
 + # create the directory hierarchy
 + mkdir -p ${CATOP}
 + mkdir -p ${CATOP}/certs
 + mkdir -p ${CATOP}/crl
 + mkdir -p ${CATOP}/newcerts
 + mkdir -p ${CATOP}/private
 + touch ${CATOP}/index.txt
 +    fi
 +    if [ ! -f ${CATOP}/private/$CAKEY ]; then
 + echo "CA certificate filename (or enter to create)"
 + read FILE
 +
 + # ask user for existing CA certificate
 + if [ "$FILE" ]; then
 +     cp_pem $FILE ${CATOP}/private/$CAKEY PRIVATE
 +     cp_pem $FILE ${CATOP}/$CACERT CERTIFICATE
 +     RET=$?
 +     if [ ! -f "${CATOP}/serial" ]; then
 + $X509 -in ${CATOP}/$CACERT -noout -next_serial \
 +       -out ${CATOP}/serial
 +     fi
 + else
 +     echo "Making CA certificate ..."
 +     $REQ -new -keyout ${CATOP}/private/$CAKEY \
 +    -out ${CATOP}/$CAREQ
 +     $CA -create_serial -out ${CATOP}/$CACERT $CADAYS -batch \
 +    -keyfile ${CATOP}/private/$CAKEY -selfsign \
 +    -extensions v3_ca \
 +    -infiles ${CATOP}/$CAREQ
 +     RET=$?
 + fi
 +    fi
 +    ;;
 +-xsign)
 +    $CA -policy policy_anything -infiles newreq.pem
 +    RET=$?
 +    ;;
 +-pkcs12)
 +    if [ -z "$2" ] ; then
 + CNAME="My Certificate"
 +    else
 + CNAME="$2"
 +    fi
 +    $PKCS12 -in newcert.pem -inkey newreq.pem -certfile ${CATOP}/$CACERT \
 +     -out newcert.p12 -export -name "$CNAME"
 +    RET=$?
 +    exit $RET
 +    ;;
 +-sign|-signreq)
 +    $CA -policy policy_anything -out newcert.pem -infiles newreq.pem
 +    RET=$?
 +    cat newcert.pem
 +    echo "Signed certificate is in newcert.pem"
 +    ;;
 +-signCA)
 +    $CA -policy policy_anything -out newcert.pem -extensions v3_ca -infiles newreq.pem
 +    RET=$?
 +    echo "Signed CA certificate is in newcert.pem"
 +    ;;
 +-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 "Signed certificate is in newcert.pem"
 +    ;;
 +-verify)
 +    shift
 +    if [ -z "$1" ]; then
 +     $VERIFY -CAfile $CATOP/$CACERT newcert.pem
 +     RET=$?
 +    else
 + for j
 + do
 +     $VERIFY -CAfile $CATOP/$CACERT $j
 +     if [ $? != 0 ]; then
 +     RET=$?
 +     fi
 + done
 +    fi
 +    exit $RET
 +    ;;
 +*)
 +    echo "Unknown arg $i" >&2
 +    usage
 +    exit 1
 +    ;;
 +esac
 +shift
 +done
 +exit $RET
 +</file>
 +<WRAP center round tip> **__Wichtig__**: \\
 +Zum besseren Verständnis der Zertifikatsthematik, gehen wir die Schritte kurz manuell durch und nutzen nicht das fast 20 jahre alte Script.</WRAP>
 +
 +=== manuelle Erstellung unserer eigenen CA ===
 +== fehlende Dateien anlegen ==
 +Als erstes legen wir die noch fehlenden Dateien an.
 +   # echo "00" > /etc/pki/CA/serial
 +
 +   # touch /etc/pki/CA/index.txt
 +
 +Somit befindet sich in unserem Pfad **/etc/pki/CA** nun folgender Inhalt:
 +   # ll /etc/pki/CA
 +<code>total 4
 +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
 +</code>
 +
 +== 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 **//cakey.pem//** abgespeichert. Das CA-Zertifikat selbst wird nach **//cacert.pem//** geschrieben.
 +
 +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. 
 +
 +{{ :centos:mailserver:bildschirmfoto-evolution-warnung.png?275 |Evolution Warnung}}
 +
 +Die Eingaben sind in der Farbe <html><font style="color: rgb(0, 0, 255)">blau</font></html> und die Rückmeldungen in der Farbe <html><font style="color: rgb(0, 255, 0)">grün</font></html> gekennzeichnet. 
 +
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl req -new -x509 -newkey rsa:4096 -keyout cakey.pem -out cacert.pem -days 9125</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">Generating a 4096 bit RSA private key
 +..................................................++
 +....................++
 +writing new private key to 'cakey.pem'
 +Enter PEM pass phrase: </font><font style="color: rgb(0, 0, 255)">des-woas-blos-I-und-sundst-koana</font>
 +<font style="color: rgb(0, 255, 0)">Verifying - Enter PEM pass phrase:</font> <font style="color: rgb(0, 0, 255)">des-woas-blos-I-und-sundst-koana</font>
 +<font style="color: rgb(0, 255, 0)">-----
 +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 '.', the field will be left blank.
 +-----
 +Country Name (2 letter code) [XX]:</font><font style="color: rgb(0, 0, 255)">DE</font>
 +<font style="color: rgb(0, 255, 0)">State or Province Name (full name) []:</font><font style="color: rgb(0, 0, 255)">Bayern</font>
 +<font style="color: rgb(0, 255, 0)">Locality Name (eg, city) [Default City]:</font><font style="color: rgb(0, 0, 255)">Pliening</font>
 +<font style="color: rgb(0, 255, 0)">Organization Name (eg, company) [Default Company Ltd]:</font><font style="color: rgb(0, 0, 255)">nausch.org</font>
 +<font style="color: rgb(0, 255, 0)">Organizational Unit Name (eg, section) []:</font><font style="color: rgb(0, 0, 255)">Zertifizierungsstelle</font>
 +<font style="color: rgb(0, 255, 0)">Common Name (eg, your name or your server's hostname) []:</font><font style="color: rgb(0, 0, 255)">nausch.org</font>
 +<font style="color: rgb(0, 255, 0)">Email Address []:</font><font style="color: rgb(0, 0, 255)">ca-support@nausch.org</font>
 +</pre></html>
 +
 +Als Ergebnis erhalten wir zwei Dateien:
 +  * **cakey.pem** den //private key// unserer //CA// und
 +  * **cacert.pem** das CA-Certifikat unserer //CA//.
 +
 +   # ll *.pem
 +
 +   -rw-r--r-- 1 root root 2171 Jul 23 14:07 cacert.pem
 +   -rw-r--r-- 1 root root 3394 Jul 23 14:07 cakey.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 <keyfile> -noout -text** die Schlüsseldatei öffnen und ausgeben lassen.
 +   # openssl rsa -in cakey.pem -noout -text
 +<code>Enter pass phrase for cakey.pem: des-woas-blos-I-und-sundst-koana
 +Private-Key: (4096 bit)
 +modulus:
 +    00:a6:c0:e4:4a:c5:be:6c:c7:fe:8d:20:34:3d:58:
 +    f5:40:3c:4b:b6:8a:df:3f:2b:cf:c2:9a:d6:0e:1e:
 +    78:25:93:b1:6e:d4:fe:c4:41:0a:3a:f4:7e:f9:f1:
 +    f1:a3:2a:b9:c2:b7:86:39:94:4a:16:be:97:e6:92:
 +    4a:3d:e7:f3:63:46:d4:fb:66:b1:cb:f6:d0:0a:9e:
 +    04:fd:cc:d0:7f:bd:af:40:01:cb:86:ab:c7:e8:25:
 +    d8:58:72:66:a7:6e:ab:af:70:a6:07:06:df:a8:86:
 +    d9:53:75:74:d5:55:a7:4c:7e:4a:55:96:39:0a:97:
 +    98:eb:b3:58:57:bc:5d:ef:7b:6c:8c:a0:ba:9f:10:
 +    67:14:f0:4f:2b:7b:b9:72:b9:ff:e2:99:3f:a7:d2:
 +    91:2c:a2:db:94:e9:bb:90:06:e2:91:06:c7:26:fb:
 +    23:06:83:b0:60:30:a2:d5:7d:22:95:62:99:42:c3:
 +    8e:58:44:32:52:29:ad:68:27:bb:ae:5d:99:67:0e:
 +    10:a0:3c:c0:a6:d4:d5:44:a8:c9:c4:a4:45:12:19:
 +    46:c3:aa:dc:e5:61:a2:0c:cf:2f:38:f3:6f:5c:13:
 +    f9:fe:86:c0:4a:ba:2a:9a:4f:25:4d:63:85:e4:6a:
 +    9d:f1:53:a0:31:64:aa:77:98:b9:0e:63:5c:de:d9:
 +    04:ed:d0:b7:fa:5b:5d:cc:e4:1e:c4:5b:e3:05:dd:
 +    79:21:ae:e1:a3:6d:0b:9e:78:fb:d7:67:cc:a4:b2:
 +    21:44:e1:0a:bc:e1:e9:ab:1d:f2:c8:a9:59:51:3c:
 +    dd:d9:e4:de:e5:a3:c7:95:83:5a:f5:c1:b1:cb:69:
 +    f5:fe:a6:8d:91:11:c4:5d:cd:b5:cc:fc:77:60:68:
 +    aa:3e:92:dc:6f:ac:55:03:82:7a:7d:77:17:00:14:
 +    4f:e2:b9:d8:87:bc:30:f1:b7:28:1d:a9:6b:25:2c:
 +    22:28:29:6b:9e:ba:ad:2f:12:77:be:e4:43:69:0f:
 +    fd:a7:f9:03:21:05:df:f4:eb:90:1c:8e:1e:82:d2:
 +    81:0d:a1:a9:00:cb:3e:b8:73:39:19:4f:32:cc:dc:
 +    4e:ea:ab:1c:1b:a1:6d:63:68:a8:3a:67:65:22:ec:
 +    0c:ea:f7:e6:38:9c:5e:0c:8c:e7:d1:30:fa:53:2d:
 +    80:2f:19:84:d2:49:17:7f:6d:d5:63:d2:20:3d:ec:
 +    e6:d7:74:65:e6:cc:be:cb:1b:07:76:96:aa:05:16:
 +    4e:26:89:ab:42:f1:39:58:2c:af:44:fb:e6:c9:ea:
 +    46:34:19:8f:6a:d4:59:55:d8:40:d5:a2:39:8e:80:
 +    ce:9b:6e:42:8f:2f:49:93:24:b5:6c:a5:07:b0:9c:
 +    f9:25:eb
 +publicExponent: 65537 (0x10001)
 +privateExponent:
 +    45:42:50:8f:8d:da:2d:ac:53:59:a2:4a:90:40:66:
 +    7c:ab:8e:76:de:ef:22:79:bb:ed:04:0a:6c:0a:d3:
 +    b4:27:c7:c6:54:c9:0c:12:47:81:7d:13:50:14:e1:
 +    5b:f7:de:f7:b4:ea:16:f8:34:5d:86:03:e9:4c:51:
 +    71:ac:e9:36:0e:b1:5f:49:a4:07:27:17:f9:90:f0:
 +    59:c9:bb:bf:92:b5:3b:4c:83:90:07:c1:1b:f6:bc:
 +    08:e0:5b:2a:a7:98:bf:61:76:53:ec:d2:f0:58:31:
 +    e3:ac:21:3e:8a:38:d6:58:8d:df:46:69:a2:b0:9c:
 +    5f:29:3a:44:16:84:9d:77:11:fa:c6:b7:3c:61:bf:
 +    ae:be:b0:e3:4a:9c:17:be:91:3d:38:91:6b:ce:d5:
 +    65:48:af:13:06:91:54:9c:c7:75:9c:ef:12:8d:b4:
 +    5a:7c:4f:c1:63:f1:fd:e1:df:7f:54:58:7b:96:65:
 +    84:db:ae:5a:d9:dc:a0:2a:00:95:c7:62:73:9f:2f:
 +    e0:9d:db:16:6f:c7:b4:a0:b6:4c:ea:3d:95:ea:d1:
 +    ad:6b:46:1c:2f:94:f2:e5:0a:a4:08:d7:f3:d2:88:
 +    3e:e3:10:f2:f8:a7:c1:37:a6:32:a2:67:76:1b:a2:
 +    46:1d:89:a7:7a:3c:23:38:57:84:56:58:b8:66:42:
 +    d9:27:95:61:cb:1b:39:61:a4:f1:cb:c1:71:ea:3f:
 +    3b:a3:44:ea:84:77:eb:f6:bb:3e:9e:08:1d:27:91:
 +    b5:89:cd:ba:97:fc:6a:de:f9:43:9d:e4:a0:b2:b5:
 +    bd:b7:ea:d7:84:2e:9e:78:5b:fc:27:73:6c:51:40:
 +    c0:bd:0c:69:3e:4a:c5:ac:15:cb:a8:7c:4a:fa:ee:
 +    bc:64:94:02:af:da:56:e5:56:9f:79:93:8d:f1:42:
 +    f7:39:99:dc:82:ab:4b:20:e9:10:da:01:2c:94:be:
 +    fa:d6:9d:59:e9:fb:b9:b8:af:79:10:25:f9:a4:22:
 +    1e:4b:03:ac:e7:a1:57:35:d8:e4:49:1b:78:c5:b9:
 +    1c:3f:30:1c:19:20:2a:b9:0f:90:aa:c1:60:19:ba:
 +    b5:de:98:c4:68:81:ef:8a:c7:fc:c7:64:85:3a:47:
 +    a7:97:b7:ec:4d:fe:f9:ce:e9:9a:2f:76:ea:77:0e:
 +    3e:ac:48:f9:f2:c4:c0:fa:af:f7:09:a6:cb:35:14:
 +    c6:30:fe:ba:7d:b2:d9:ba:50:9a:84:5c:17:11:65:
 +    c4:b9:86:c7:db:52:05:b6:66:df:05:e9:17:03:c1:
 +    02:5b:77:06:0b:7f:5a:a9:f9:01:b7:8d:4a:c3:42:
 +    d7:cd:80:f3:12:c1:36:e2:bf:08:36:52:d8:c6:79:
 +    6d:a1
 +prime1:
 +    00:dd:13:5d:14:12:93:0e:aa:0b:5f:b2:a7:a8:10:
 +    5b:0c:cc:41:46:bb:ac:3a:d1:e1:e8:76:4b:1a:49:
 +    0e:d4:0c:5e:51:75:c4:77:f5:68:dd:26:f2:d1:b6:
 +    02:77:e2:cf:53:37:a6:f4:a5:b3:dc:26:56:bd:8f:
 +    3e:b2:22:67:67:dc:a1:70:40:6b:57:33:b4:08:e6:
 +    d0:f3:a4:dd:b3:0c:17:bc:57:2a:47:9a:fc:c8:0d:
 +    03:41:b7:56:d6:ce:69:bf:7a:45:5a:72:6c:02:b3:
 +    70:a7:fa:62:ac:a4:5d:5a:c6:92:5d:84:f4:8f:90:
 +    3a:d2:4a:79:89:d7:6a:50:41:12:ea:b9:24:e0:96:
 +    e5:70:62:0a:50:3e:82:cf:56:08:99:47:ba:bf:7b:
 +    8f:b7:b0:89:b6:06:ea:0e:78:86:5b:e1:32:2f:49:
 +    61:88:62:29:c3:db:c0:a1:89:1a:66:48:c4:c1:07:
 +    12:11:2a:ad:73:0a:c2:f3:fa:75:66:88:87:c0:66:
 +    cc:70:7c:29:96:e1:4b:36:36:7e:73:4c:ba:65:5b:
 +    c6:07:c1:e1:d0:43:e6:c8:6e:83:ed:67:c2:ce:b4:
 +    2c:a9:e2:5c:87:24:bb:ad:f0:3c:d7:7a:c7:86:aa:
 +    d3:e3:f1:24:12:8b:b1:55:3e:a7:77:65:80:75:fe:
 +    b6:37
 +prime2:
 +    00:c1:18:a8:42:3e:47:be:ac:a1:5a:82:06:24:ff:
 +    15:d6:07:dc:79:94:25:6a:f9:de:63:18:d9:93:ca:
 +    d8:88:94:8a:d3:7f:f3:2e:6f:1c:64:40:86:e7:3d:
 +    34:8e:45:c9:f4:dd:1a:17:bb:7f:55:9d:ed:d6:d3:
 +    73:7e:c5:9d:a8:0f:cd:00:eb:78:9c:0c:4d:77:b5:
 +    f7:80:e4:5c:ee:84:1b:aa:9f:b9:82:24:b3:e9:cd:
 +    7e:ee:bb:bf:ce:a0:82:cf:cc:fa:2c:b8:07:fe:79:
 +    ab:00:41:6a:55:3b:88:6e:5c:53:64:07:c2:2a:78:
 +    29:a6:c2:5c:5d:77:1d:a1:83:d5:d1:4b:3d:ce:88:
 +    e4:6f:e8:ff:0b:cb:9e:79:51:63:00:02:5e:2f:fc:
 +    2d:14:9d:02:e0:eb:88:8b:35:76:94:a9:da:da:a9:
 +    b6:5b:eb:b2:ff:ad:72:a6:4e:6a:1d:08:36:99:fc:
 +    63:8b:92:66:c9:0b:af:6d:64:f0:d0:0e:8b:10:2c:
 +    45:7f:2e:e3:6d:7d:e0:60:69:65:30:0e:25:5b:d8:
 +    06:00:77:cb:1e:d5:9b:72:34:49:e8:9c:c6:a8:61:
 +    2d:e0:f8:fe:c7:57:ae:47:79:14:07:22:38:9e:bf:
 +    44:ec:28:b5:73:73:a4:c1:26:89:b0:71:ee:4e:4e:
 +    b3:ed
 +exponent1:
 +    69:79:e7:9a:c0:11:f1:99:27:bc:0c:dc:f8:ce:74:
 +    e2:72:41:62:a1:ff:d6:40:74:ec:18:24:54:f2:2e:
 +    64:f5:51:ba:c3:d9:6c:f2:65:89:be:1f:73:f6:c6:
 +    ce:b4:23:fe:ac:3a:b7:d6:a7:2d:8e:0d:2c:7b:bf:
 +    89:f5:e8:28:21:97:d4:9a:a7:9b:ff:4b:12:44:2d:
 +    c5:51:0f:85:71:6b:91:ac:74:bb:9d:32:a5:af:af:
 +    b2:16:eb:13:a9:7f:c2:9f:6f:9f:6b:a0:24:d9:c0:
 +    12:24:e0:17:46:84:53:df:11:ce:14:b5:2a:19:c2:
 +    36:ba:d9:a9:ee:61:06:d1:45:59:3f:e4:5c:53:22:
 +    3c:b0:4a:03:67:0f:ba:24:6e:0d:d3:af:41:d4:8e:
 +    09:31:ed:42:2f:a2:54:2d:24:cd:89:70:0c:27:92:
 +    a5:23:50:91:e5:b2:ce:5f:3f:7d:35:92:ca:15:b9:
 +    84:ff:3b:a9:fb:a4:70:0b:3b:20:24:5b:c0:6c:4b:
 +    76:0f:87:38:39:5d:4d:0c:4a:e0:6f:e7:2e:9c:ce:
 +    aa:bc:d2:24:2f:81:58:77:81:f2:2e:e3:3f:03:af:
 +    9b:8e:28:5f:42:23:59:25:99:a1:a5:2e:b5:0d:a3:
 +    f2:c9:06:50:e2:dd:44:b2:93:eb:df:3d:9f:0e:5b:
 +    99
 +exponent2:
 +    0f:3d:16:ea:43:67:fe:10:39:9b:9e:ef:45:34:2c:
 +    50:fb:c5:d6:82:6e:81:86:be:9a:2b:77:e0:45:fd:
 +    d8:a9:80:5b:38:99:c4:6c:58:5d:41:0a:64:6d:5c:
 +    1c:6e:3d:85:e9:7d:09:aa:6e:5e:1f:5c:89:bb:9e:
 +    3d:be:f2:b6:34:a9:05:0d:90:33:20:75:6c:a1:1b:
 +    ab:3c:5a:69:28:5b:d6:97:4c:58:8c:f4:f5:da:95:
 +    cd:d9:5b:45:bf:3d:13:91:25:9d:29:d8:d7:a8:5a:
 +    6a:66:bf:31:82:c5:3d:90:63:b4:5d:38:61:89:a2:
 +    1f:da:ee:d7:21:73:61:2f:ba:4c:0e:18:0e:98:97:
 +    0e:8d:e0:b2:d9:9a:e4:10:1c:33:ff:fb:d6:e5:9b:
 +    d9:28:9a:f5:8d:20:f5:7b:7e:a4:34:d3:64:b6:48:
 +    01:f1:13:eb:41:90:ee:b6:f9:80:d9:09:16:15:e8:
 +    f5:36:d4:8d:c1:32:52:fb:c8:55:63:10:6e:72:4f:
 +    f9:bd:85:8d:3a:85:de:95:f2:ba:5c:23:6e:a0:19:
 +    b9:27:bb:0b:ef:e7:98:97:af:cd:7f:b1:dd:cf:ed:
 +    82:f7:a3:83:af:d3:bd:28:3d:00:63:1e:fc:c8:33:
 +    74:3f:b2:32:2e:4a:2e:44:10:51:b0:6c:12:19:fb:
 +    f1
 +coefficient:
 +    00:a6:96:2f:62:1b:35:35:c6:20:ef:a9:8e:66:ac:
 +    5b:2c:a4:cc:ff:ed:a6:53:ad:9d:e1:cb:73:4e:3c:
 +    df:08:f8:7a:10:ee:f1:3b:51:52:6a:ba:eb:60:3a:
 +    72:ee:89:d5:ce:f3:64:bb:44:97:0a:94:25:7f:ce:
 +    0e:f5:13:33:1e:2c:ba:7e:7e:ec:39:4a:ea:8c:05:
 +    76:48:59:f2:19:e5:16:37:1f:1d:dc:9e:06:cb:20:
 +    31:9c:00:61:40:ba:8b:94:c2:68:2c:54:04:a4:5b:
 +    36:d5:36:dd:cc:64:d8:15:d1:14:0e:de:23:9a:59:
 +    c3:b3:1d:7c:6d:29:98:6d:b3:11:71:d1:6e:d2:9d:
 +    01:9a:12:aa:f9:1f:54:f1:d6:0a:b3:ea:1c:b4:cb:
 +    fb:91:f3:dd:e4:a7:3c:f0:74:f1:c9:e5:42:f2:2d:
 +    03:b6:a4:ba:34:92:f5:70:f0:ae:34:b3:6f:c4:69:
 +    3d:14:76:ec:a6:e6:c6:d2:a4:d3:05:30:0e:f8:de:
 +    46:f1:f6:bc:4d:ba:7c:fe:fa:5d:fa:35:54:df:be:
 +    b5:08:92:ea:ba:b6:9c:cc:06:77:40:1e:c3:cc:f7:
 +    6a:4f:56:a7:b3:a9:9a:55:91:55:e0:aa:8e:f7:8d:
 +    6e:59:26:d7:8e:ea:c8:e1:19:a9:12:c0:43:f7:7d:
 +    82:f5
 +</code>
 +
 +Will man die Passphrase eines Schlüssels entfernen, geht man wie folgt vor:
 +
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl rsa <cakey.pem >cakey_ohne_passphrase.pem</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">Enter pass phrase: </font><font style="color: rgb(0, 0, 255)">des-woas-blos-I-und-sundst-koana</font>
 +<font style="color: rgb(0, 255, 0)">writing RSA key</font>
 +</pre></html>
 +
 +Auch hier sind die Eingaben sind in der Farbe <html><font style="color: rgb(0, 0, 255)">blau</font></html>, sowie die Rückmeldungen in der Farbe <html><font style="color: rgb(0, 255, 0)">grün</font></html> gekennzeichnet.
 +
 +== 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 /etc/pki/tls/openssl.cnf
 +<file bash /etc/pki/tls/openssl.cnf>#
 +# 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::HOME/.rnd
 +
 +# Extra OBJECT IDENTIFIER info:
 +#oid_file = $ENV::HOME/.oid
 +oid_section = new_oids
 +
 +# To use this configuration file with the "-extfile" option of the
 +# "openssl x509" utility, name here the section containing the
 +# X.509v3 extensions to use:
 +# extensions = 
 +# (Alternatively, use a configuration file that has only
 +# X.509v3 extensions in its main [= default] section.)
 +
 +[ new_oids ]
 +
 +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'.
 +# 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 # The default ca section
 +
 +####################################################################
 +[ CA_default ]
 +
 +dir = /etc/pki/CA # Where everything is kept
 +certs = $dir/certs # Where the issued certs are kept
 +crl_dir = $dir/crl # Where the issued crl are kept
 +database = $dir/index.txt # database index file.
 +#unique_subject = no # Set to 'no' to allow creation of
 + # several ctificates with same subject.
 +new_certs_dir = $dir/newcerts # default place for new certs.
 +
 +certificate = $dir/cacert.pem # The CA certificate
 +serial = $dir/serial # The current serial number
 +crlnumber = $dir/crlnumber # the current crl number
 + # must be commented out to leave a V1 CRL
 +crl = $dir/crl.pem # The current CRL
 +private_key = $dir/private/cakey.pem# The private key
 +RANDFILE = $dir/private/.rand # private random number file
 +
 +x509_extensions = usr_cert # The extentions to add to the cert
 +
 +# Comment out the following two lines for the "traditional"
 +# (and highly broken) format.
 +name_opt = ca_default # Subject Name options
 +cert_opt = ca_default # Certificate field options
 +
 +# 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    = 365        # how long to certify for (one year)
 +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 'anything' policy
 +# At this point in time, you must list all acceptable 'object'
 +# 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, T61String, BMPString.
 +# pkix : PrintableString, BMPString (PKIX recommendation before 2004)
 +# utf8only: only UTF8Strings (PKIX recommendation after 2004).
 +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
 +# 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)
 +#stateOrProvinceName_default = Default Province
 +
 +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 :-)
 +#1.organizationName = Second Organization Name (eg, company)
 +#1.organizationName_default = World Wide Web Pty Ltd
 +
 +organizationalUnitName = Organizational Unit Name (eg, section)
 +#organizationalUnitName_default =
 +
 +commonName = Common Name (eg, your name or your server\'s hostname)
 +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 'ca' signs a request.
 +
 +# 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:FALSE
 +
 +# 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, digitalSignature, keyEncipherment
 +
 +# This will be displayed in Netscape's comment listbox.
 +nsComment = "OpenSSL Generated Certificate"
 +
 +# PKIX recommendations harmless if included in all certificates.
 +subjectKeyIdentifier=hash
 +authorityKeyIdentifier=keyid,issuer
 +
 +# This stuff is for subjectAltName and issuerAltname.
 +# Import the email address.
 +# subjectAltName=email:copy
 +# An alternative to produce certificates that aren't
 +# deprecated according to PKIX.
 +# subjectAltName=email:move
 +
 +# Copy subject details
 +# issuerAltName=issuer:copy
 +
 +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
 +#nsBaseUrl
 +#nsRevocationUrl
 +#nsRenewalUrl
 +#nsCaPolicyUrl
 +#nsSslServerName
 +
 +# This is required for TSA certificates.
 +# extendedKeyUsage = critical,timeStamping
 +
 +[ v3_req ]
 +
 +# Extensions to add to a certificate request
 +
 +basicConstraints = CA:FALSE
 +keyUsage = nonRepudiation, digitalSignature, keyEncipherment
 +
 +[ v3_ca ]
 +
 +
 +# Extensions for a typical CA
 +
 +
 +# PKIX recommendation.
 +
 +subjectKeyIdentifier=hash
 +
 +authorityKeyIdentifier=keyid:always,issuer
 +
 +# This is what PKIX recommends but some broken software chokes on critical
 +# extensions.
 +#basicConstraints = critical,CA:true
 +# 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
 +# Copy issuer details
 +# issuerAltName=issuer:copy
 +
 +# DER hex encoding of an extension: beware experts only!
 +# obj=DER:02:03
 +# Where 'obj' is a standard or added object
 +# You can even override a supported extension:
 +# basicConstraints= critical, DER:30:03:01:01:FF
 +
 +[ crl_ext ]
 +
 +# CRL extensions.
 +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
 +
 +# issuerAltName=issuer:copy
 +authorityKeyIdentifier=keyid:always
 +
 +[ 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:FALSE
 +
 +# 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, digitalSignature, keyEncipherment
 +
 +# This will be displayed in Netscape's comment listbox.
 +nsComment = "OpenSSL Generated Certificate"
 +
 +# PKIX recommendations harmless if included in all certificates.
 +subjectKeyIdentifier=hash
 +authorityKeyIdentifier=keyid,issuer
 +
 +# This stuff is for subjectAltName and issuerAltname.
 +# Import the email address.
 +# subjectAltName=email:copy
 +# An alternative to produce certificates that aren't
 +# deprecated according to PKIX.
 +# subjectAltName=email:move
 +
 +# Copy subject details
 +# issuerAltName=issuer:copy
 +
 +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
 +#nsBaseUrl
 +#nsRevocationUrl
 +#nsRenewalUrl
 +#nsCaPolicyUrl
 +#nsSslServerName
 +
 +# This really needs to be in place for it to be a proxy certificate.
 +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
 +
 +####################################################################
 +[ tsa ]
 +
 +default_tsa = tsa_config1 # the default TSA section
 +
 +[ tsa_config1 ]
 +
 +# These are used by the TSA reply generation only.
 +dir = ./demoCA # TSA root directory
 +serial = $dir/tsaserial # The current serial number (mandatory)
 +crypto_device = builtin # OpenSSL engine to use for signing
 +signer_cert = $dir/tsacert.pem # The TSA signing certificate
 + # (optional)
 +certs = $dir/cacert.pem # Certificate chain to include in reply
 + # (optional)
 +signer_key = $dir/private/tsakey.pem # The TSA private key (optional)
 +
 +default_policy = tsa_policy1 # Policy if request did not specify it
 + # (optional)
 +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
 +digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
 +accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
 +clock_precision_digits  = 0 # number of digits after dot. (optional)
 +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)
 +</file>
 +
 +==== 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 <html><font style="color: rgb(0, 0, 255)">blau</font></html> und die Rückmeldungen in der Farbe <html><font style="color: rgb(0, 255, 0)">grün</font></html> gekennzeichnet. 
 +
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl genrsa -out serverkey.pem -aes256 4096</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">Generating RSA private key, 4096 bit long modulus
 +.......................................................................................................................................................................................................................++
 +........................................................................................................................................................................................++
 +e is 65537 (0x10001)
 +Enter pass phrase for serverkey.pem: </font><font style="color: rgb(0, 0, 255)">12qwasyx</font>
 +<font style="color: rgb(0, 255, 0)">Verifying - Enter pass phrase for serverkey.pem: </font></font><font style="color: rgb(0, 0, 255)">12qwasyx</font>
 +</pre></html>
 +
 +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.
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl rsa -in serverkey.pem -out serverkey_2.pem</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">Enter pass phrase:
 +writing RSA key</font>
 +</pre></html>
 +
 +Wie schon zuvor schützen wir auch hier den Serverschlüssel über die Dateirechte, nachdem wir diesen umbenannt haben.
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">mv serverkey_2.pem serverkey.pem -f</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">chmod 400 serverkey.pem</font>
 +</pre></html>
 +
 +==== Certificate Signing Request erzeugen ====
 +Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((**C**ertificate **S**igning **R**equest)), den wir dann in einem weiteren Schritt von unserer eigenen CA signieren lassen werden, oder bei der ausgewählten **kommerziellen CA** einkippen. <WRAP round alert> **__Wichtig__**: Bei unserem Serverzertifikat ist der **Common Name** von entscheidender Bedeutung. Hier muss der DNS-Name unseres Postfix-Servers eingetragen werden, unter dem der Mailserver angesprochen wird!</WRAP>
 +
 +Auch hier sind die Eingaben in der Farbe <html><font style="color: rgb(0, 0, 255)">blau</font></html> und die Rückmeldungen in der Farbe <html><font style="color: rgb(0, 255, 0)">grün</font></html> gekennzeichnet. 
 +
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl req -new -key serverkey.pem -out csr.pem -nodes</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">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 '.', the field will be left blank.
 +-----
 +Country Name (2 letter code) [XX]:</font><font style="color: rgb(0, 0, 255)">DE</font>
 +<font style="color: rgb(0, 255, 0)">State or Province Name (full name) []</font></font><font style="color: rgb(0, 0, 255)">Bayern</font>
 +<font style="color: rgb(0, 255, 0)">Locality Name (eg, city) [Default City]:</font></font><font style="color: rgb(0, 0, 255)">Pliening</font>
 +<font style="color: rgb(0, 255, 0)">Organization Name (eg, company) [Default Company Ltd]:</font></font><font style="color: rgb(0, 0, 255)">nausch.org</font>
 +<font style="color: rgb(0, 255, 0)">Organizational Unit Name (eg, section) []:</font></font><font style="color: rgb(0, 0, 255)">Postoffice</font>
 +<font style="color: rgb(0, 255, 0)">Common Name (eg, your name or your server's hostname) []:</font></font><font style="color: rgb(0, 0, 255)">mx01.nausch.org</font>
 +<font style="color: rgb(0, 255, 0)">Email Address []:</font></font><font style="color: rgb(0, 0, 255)">postmaster@nausch.org</font>
 +<font style="color: rgb(0, 255, 0)">
 +Please enter the following 'extra' attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:</font>
 +</pre></html>
 +
 +<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
 +<code>-----BEGIN CERTIFICATE REQUEST-----
 +MIIC4TCCAckCAQAwgZsxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xETAP
 +BgNVBAcMCFBsaWVuaW5nMRMwEQYDVQQKDApuYXVzY2gub3JnMRMwEQYDVQQLDApQ
 +b3N0b2ZmaWNlMRgwFgYDVQQDDA9teDAxLm5hdXNjaC5vcmcxJDAiBgkqhkiG9w0B
 +CQEWFXBvc3RtYXN0ZXJAbmF1c2NoLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEP
 +ADCCAQoCggEBANGHFR6fvj33ISUmvZw4g92Di78T3euAXDcOF+VpXnivwbegDVT5
 +utTtc2mdFUD5AeTVpdOdE7AZfjqaXFpwo5A8TRT11cxEWtZ+cJw4KBSqSNi9B2K/
 +ApQ4mp8l95/Rm6fgLstpt8/8ZvlOQVQLv4erePOhmeJ+V5G4r7YxldfTn8T5PmMq
 +tWxqd+HZs3pYqDPC+Y9q6ul6UDV/lyKJpZy5e1NzweuyHKSjfQh7IjEAnYlqPfMc
 +oSO5Mw2f9+ww44U7QsbZPrxZz2AVFrR2zUtcVu7A7GLWL90tFYMWEZm2mWkc4GVg
 +GTCcRrCmwdL6dBURzZ3sIUIFavYwJJAtBC8CAwEAAaAAMA0GCSqGSIb3DQEBCwUA
 +A4IBAQCY7ZrJ6i/T/iK3bMVNoe8q9ZaoXGcKa33tZnae1WMfoS2NBWZJHI6/i4m4
 +xc2iMdoH8rElmc1cC7nk6vV61mF3Fxx20+ItXVdciSGPGqOlh+kiKbGbjtJCC+r+
 +0Xa1HvRnoHGHPA3ZOCBvxutNS4JC6OmaSLOkGMU1p5aSryyrpPEWg921Qt47YaEz
 +cirOHxaeH5aQ/RSugeGuRmAeo0KUPIM8//eL80Xmd4Wxjan58dkuat7FEdp6MIFE
 +J//aMh6n6scA+UgfzY9c4Ep6Mq4GP6ID7DWZC7AT6LldXMS+FvCH1GQBPGImM14B
 +01quu+iQHkbA00jyDB0SL4tIlQSD
 +-----END CERTIFICATE REQUEST-----
 +</code>
 +</WRAP>
 +
 +Bei Interesse können wir uns unseren **CSR** auch ansehen, dazu benutzen wir folgenden Befehl:
 +   # openssl req -noout -text -in csr.pem
 +<code>Certificate Request:
 +    Data:
 +        Version: 0 (0x0)
 +        Subject: C=DE, ST=Bayern, L=Pliening, O=nausch.org, OU=Postoffice, CN=mx01.nausch.org/emailAddress=postmaster@nausch.org
 +        Subject Public Key Info:
 +            Public Key Algorithm: rsaEncryption
 +                Public-Key: (2048 bit)
 +                Modulus:
 +                    00:d1:87:15:1e:9f:be:3d:f7:21:25:26:bd:9c:38:
 +                    83:dd:83:8b:bf:13:dd:eb:80:5c:37:0e:17:e5:69:
 +                    5e:78:af:c1:b7:a0:0d:54:f9:ba:d4:ed:73:69:9d:
 +                    15:40:f9:01:e4:d5:a5:d3:9d:13:b0:19:7e:3a:9a:
 +                    5c:5a:70:a3:90:3c:4d:14:f5:d5:cc:44:5a:d6:7e:
 +                    70:9c:38:28:14:aa:48:d8:bd:07:62:bf:02:94:38:
 +                    9a:9f:25:f7:9f:d1:9b:a7:e0:2e:cb:69:b7:cf:fc:
 +                    66:f9:4e:41:54:0b:bf:87:ab:78:f3:a1:99:e2:7e:
 +                    57:91:b8:af:b6:31:95:d7:d3:9f:c4:f9:3e:63:2a:
 +                    b5:6c:6a:77:e1:d9:b3:7a:58:a8:33:c2:f9:8f:6a:
 +                    ea:e9:7a:50:35:7f:97:22:89:a5:9c:b9:7b:53:73:
 +                    c1:eb:b2:1c:a4:a3:7d:08:7b:22:31:00:9d:89:6a:
 +                    3d:f3:1c:a1:23:b9:33:0d:9f:f7:ec:30:e3:85:3b:
 +                    42:c6:d9:3e:bc:59:cf:60:15:16:b4:76:cd:4b:5c:
 +                    56:ee:c0:ec:62:d6:2f:dd:2d:15:83:16:11:99:b6:
 +                    99:69:1c:e0:65:60:19:30:9c:46:b0:a6:c1:d2:fa:
 +                    74:15:11:cd:9d:ec:21:42:05:6a:f6:30:24:90:2d:
 +                    04:2f
 +                Exponent: 65537 (0x10001)
 +        Attributes:
 +            a0:00
 +    Signature Algorithm: sha256WithRSAEncryption
 +         98:ed:9a:c9:ea:2f:d3:fe:22:b7:6c:c5:4d:a1:ef:2a:f5:96:
 +         a8:5c:67:0a:6b:7d:ed:66:76:9e:d5:63:1f:a1:2d:8d:05:66:
 +         49:1c:8e:bf:8b:89:b8:c5:cd:a2:31:da:07:f2:b1:25:99:cd:
 +         5c:0b:b9:e4:ea:f5:7a:d6:61:77:17:1c:76:d3:e2:2d:5d:57:
 +         5c:89:21:8f:1a:a3:a5:87:e9:22:29:b1:9b:8e:d2:42:0b:ea:
 +         fe:d1:76:b5:1e:f4:67:a0:71:87:3c:0d:d9:38:20:6f:c6:eb:
 +         4d:4b:82:42:e8:e9:9a:48:b3:a4:18:c5:35:a7:96:92:af:2c:
 +         ab:a4:f1:16:83:dd:b5:42:de:3b:61:a1:33:72:2a:ce:1f:16:
 +         9e:1f:96:90:fd:14:ae:81:e1:ae:46:60:1e:a3:42:94:3c:83:
 +         3c:ff:f7:8b:f3:45:e6:77:85:b1:8d:a9:f9:f1:d9:2e:6a:de:
 +         c5:11:da:7a:30:81:44:27:ff:da:32:1e:a7:ea:c7:00:f9:48:
 +         1f:cd:8f:5c:e0:4a:7a:32:ae:06:3f:a2:03:ec:35:99:0b:b0:
 +         13:e8:b9:5d:5c:c4:be:16:f0:87:d4:64:01:3c:62:26:33:5e:
 +         01:d3:5a:ae:bb:e8:90:1e:46:c0:d3:48:f2:0c:1d:12:2f:8b:
 +         48:95:04:83
 +</code>
 +
 +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, wir erstellen das benötigte **X.509**-Serverzertifikat. 
 +
 +Wie schon bereits bei den anderen Konfigurationsbeispielen, sind auch hier die Eingaben in der Farbe <html><font style="color: rgb(0, 0, 255)">blau</font></html> und die Rückmeldungen in der Farbe <html><font style="color: rgb(0, 255, 0)">grün</font></html> gekennzeichnet. 
 +
 +<html><pre class="code">
 +<font style="color: rgb(0, 0, 0)"># </font><font style="color: rgb(0, 0, 255)">openssl ca -in csr.pem -notext -out servercert.pem</font>
 +</pre></html>
 +<html><pre class="code">
 +<font style="color: rgb(0, 255, 0)">Using configuration from /etc/pki/tls/openssl.cnf
 +Enter pass phrase for /etc/pki/CA/private/cakey.pem: </font><font style="color: rgb(0, 0, 255)">des-woas-blos-I-und-sundst-koana</font>
 +<font style="color: rgb(0, 255, 0)">Check that the request matches the signature
 +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               = DE
 +            stateOrProvinceName       = Bayern
 +            organizationName          = nausch.org
 +            organizationalUnitName    = Postoffice
 +            commonName                = mx01.nausch.org
 +            emailAddress              = postmaster@nausch.org
 +        X509v3 extensions:
 +            X509v3 Basic Constraints: 
 +                CA:FALSE
 +            Netscape Comment: 
 +                OpenSSL Generated Certificate
 +            X509v3 Subject Key Identifier: 
 +                43:98:32:9B:BA:65:AD:14:08:67:FB:B0:B1:BD:BD:57:A8:B4:3D:C9
 +            X509v3 Authority Key Identifier: 
 +                keyid:19:F5:FD:B1:D1:98:4B:E3:E8:26:CD:55:CB:14:08:19:67:9E:78:16
 +
 +Certificate is to be certified until Oct 19 13:23:33 2016 GMT (730 days)
 +Sign the certificate? [y/n]:</font></font><font style="color: rgb(0, 0, 255)">y</font>
 +<font style="color: rgb(0, 255, 0)">
 +
 +1 out of 1 certificate requests certified, commit? [y/n]</font></font><font style="color: rgb(0, 0, 255)">y</font>
 +<font style="color: rgb(0, 255, 0)">Write out database with 1 new entries
 +Data Base Updated</font>
 +</pre></html>
 +
 +==== Speicherort ====
 +Bei der Installation von Postfix wurden noch keine speziellen Ordner im Verzeichnis **/etc/pki** angelegt. Dies holen wir nun kurz nach.
 +   # mkdir -p /etc/pki/postfix/certs /etc/pki/postfix/private
 +
 +
 +<code>/etc/pki/postfix/
 +├── certs
 +└── private
 +</code>
 +
 +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!
 +</WRAP>
 +
 +
 +  - unseren //Serverzertifikat// : **servercert.pem** <code> # mv /etc/pki/CA/servercert.pem /etc/pki/postfix/certs/servercert.pem</code>
 +  - unseren //Serverschlüssel// : **serverkey.pem** <code> # mv /etc/pki/CA/serverkey.pem /etc/pki/postfix/private/serverkey.pem</code>
 +  - das //CA-Zertifikat// : **cacert.pem** <code> # cp /etc/pki/CA/cacert.pem /etc/pki/postfix/certs/</code>
 +  - und schützen diese Dateien mit den Dateirechten **400**: <code> # chmod 400 /etc/pki/postfix/private/*.pem
 + # chmod 400 /etc/pki/postfix/certs/*.pem</code>
 +
 +
 +
 +===== CA Trust =====
 +{{page>centos:ca-trust&nofooter&showheader}}
 +
 +{{page>centos:ca-chain&nofooter&showheader}}
 +===== Postfix konfigurieren =====
 +Die Konfiguration der TLS-Optionen erfolgt in der Hauptkonfigurationsdatei //**/etc/postfix/main.cf**// unseres Postfix Mailservers.
 +==== Zertifikate und Key(s) ====
 +Postfix kennt grundsätzlich zwei verschiedene Transportrichtungen bei der Verarbeitung von eMails:
 +
 +  * **ankommend:** Für den Empfang der eMails ist unser //**[[centos:mail_c7:mta_1#daemone_queues_und_dienste|SMTP-Daemon]]**// zuständig.
 +  * **abgehend:** Der Versand bzw. Weiterleitung erfolgt durch den //**[[centos:mail_c7:mta_1#daemone_queues_und_dienste|SMTP-Client]]**//.
 +
 +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, also die Empfangsrichtung von unserem Mailserver aus gesehen. Für die (asynchrone] Verschlüsselung benötigen wir drei Dinge:
 +  - **[[centos:mail_c7:mta_5?&#schluessel_fuer_das_serverzertifikat_erzeugen|privaten Schlüssel/Serverkey]]**, den wir auf unserem Server erstellt haben. 
 +  - **[[centos:mail_c7:mta_5#zertifikatserstellung|Zertifikat]]**, welches die CA((Certificate Authority)) an Hand unseres [[centos:mail_c7:mta_5#certificate_signing_request_erzeugen|CSR]]((Certificate Signing Request)) erstellt und mit dem Root- bzw. intermediate Zertifikat signiert hat. 
 +  - **[[centos:mail_c7:mta_5#zertifizierungspfad_beim_ssl_zertificate_trusted_chain|CA-Zertifikate]]**: Das Root- und alle Zwischenzertifikate der CA, von der wir unser Serverzertifikat erhalten haben.
 +
 +Diese drei Teilen weisen wir nun den zugehörigen Postfixparametern **smtpd_tls_key_file**, **smtpd_tls_cert_file** und **smtpd_tls_CAfile** zu: 
 +  - **[[centos:mail_c7:mta_5?&#schluessel_fuer_das_serverzertifikat_erzeugen|privaten Schlüssel/Serverkey]]:** \\ Unseren privaten Schlüssel/Serverkey haben wir in der Datei **mx01.nausch.org.serverkey_151015.pem** im Verzeichnis //**/etc/pki/postfix/private/**// abgelegt. \\ \\ <code> # vim /etc/pki/postfix/private/mx01.nausch.org.serverkey_151015.pem</code> <file /etc/pki/postfix/private/mx01.nausch.org.serverkey_151015.pem>-----BEGIN RSA PRIVATE KEY-----
 +MIIJKQIBAAKCAgEA148Cwr3Z9vK9I2uc1iYZK9hbcRoqR/9/6fNRXHAJRYB14OGv
 +q9tpf43ypjKpZBCL+OE3SCrG3W6/paGQBcNeR2lIqhbD1sPvjv09fTmSiY3qf1v8
 +FhRUpLk1eXjAShxGpyH6Xrb9xK7tishirSHuCIhXhtjSzNZQeMg+8yfbrQpzRK/z
 +vxonHNX1EWC0DS54+5UUT6Eb6Q8kK545+8/Xu5V4INsl+PO3SHnWGdoFGrG7sfbV
 +gfIhFwnfsyh+9trp5WTeVFu40mzs7WZRHATbrwFZqJ4F/UKpvIuDHsAdZQpvZy8U
 +H74Mm4xyU8IkU8R1lh1TVGyeUarMRef9xuCjxioqwbw6kHcjfkmY4OI+XlAO7BIJ
 +EVe2RVocvjqIAeQpFr3pOXCg390/dtWTcdKYq9JUBJLVsvI+iZ1btHH2Do3lsI1O
 +oBmpvc7tswRVp501ZCPgOv5dkFbPyM+brUF3QZHv6mHAgleTQnUaTRGfBfcEzki/
 +TCtZlf66IBEFI7o4I3weD+u+DRfVy5S2mAXwCqL9QTyqf/sasNGlshlDvhrdp/zH
 +r3m1EID4UpusuSdZ2oqFWztU+ZnKQDRhqjNH1YhEZJu66og4X3hzjL2y8OkCAwEA
 +AQKCAgEAoKt/IkrCeXhLFGi02UZCgtTcq7wWAd5mqKntXhpAPubWdk2iMLh6W9qi
 ++PoybwaC8WaI4GKEMh0wk1ehk5swPhqPaJ3vWM1r7O17Jbfh0zSIsBPxjkuYIjRa
 +xhiC/Av9WP/95bPE0O4ouTtoj3MlBdNrDySyypT3LbyCpaFRIWh/fnjAuHBk+vb1
 +7dncciELZK5F4W1CT+UXN9fO/T+KHiAKJX/d+EJSbwTLLxDpg9yDOJJx+2Jx/uNX
 +rKFI835NPTDMl+H9XMUlb8GbdJ9iLPbnOI5AioSWe9YciN5h6ZjKz4atdBNXKMX6
 +UJ8Bq9xWdN6vfW90npwEKZuXH2xblYHTip+BQD2yDDtGLRFPv70/pWUkoP6mlkcw
 +D0ycFMD10sYo2tg69QHCwzdzgj6l/UUovu8N1QFgcwhykAEL/oCinDpQup8fuE3G
 +vjMSmpcoCinDpQKGGUwpc65C5hWj7H3WO13fZGzIl33BBK9B0DG1GdJSAIlTh9hy
 +cu0llaQ0bVWniXj42QeojGbUmAbB67rzgpN+rAfJilWNuNx0sEyyvDcjI04dJ9pN
 +zWDpQKGGUwpc65C5hW91z2F1ckD1cHd0Ch53l6571n5Kn13UJ0oUCggEBAP/Q4Yo
 +BiUpOphahwy7fz5mFWGCnpz5fmUpfNjzJlI+ibqggT7geRbiR8iZUp4+AW+W8u8L
 +YnpWDErK8cQ+U08mLb3NBTHZETvwsmiAYdHoL/8PvgONmNtUzqD8aInbiQ7nPg95
 +uQZoYiFSbqfkj+Jcvu9ljrJTkpIoVsLp68040hdF9EbAIEMrPY8o9Dz6/DQpoq2p
 +dzNHGyFBx62xyaDTMk20fLrPMqF/DxQOoWPSvmMWJs3fXs/33yU4zatnEMx3lDp8
 +9FlcVMhNEHSizmEvhAnK7vdHPFcvkfQVbK3f8ZCy7B76OmY6lPtkb3MJRGyVuP2B
 +ljb+IGsa3/H3l0MCggEBANe2tvj7fV1vr3/yOslvnLSxTLR4iDPdUwdF3ujsPthI
 +sJSB7KswFImUqNHSZ4NoDG+KtE+lYHAkMQMOhG9/U5389Ka/HRgC4wQwPX0jYhrZ
 +e83S0uVn/aQPgDFhKxfQXqISJguRcraqNGsZAjCZImA1b+hIDNrTsnA/uP6wBATs
 +mxh5REItS1amoBRdt2fjzJIhRbIdlRBjYPJQl6BWk07AIt4D52XphpuLrmCMUbSY
 +oTvS/W6VoanymlK8arXLu9+STZDibGEk/H/IzMXJ3fp9tPasxFwrgN8PSaYZ9C3U
 +0LQXUYKXBfw6cKh98wUV5Yoo/5bhVjqp4oq0ymzKpmMCggEAbRN7l50jOaUivuOa
 +wesQjmKoqzMuvnADXM8b1MWYiWjxAQp/EXhVKVTClt4JRD/cDOCoJRUNoGwgQaPX
 +An4wt4bn6g4JMQAFQTGYYMac7wu5q1/i/VDa5Gp80FfPmzhocFpZM/AK3JiVfu/P
 +Dvd+Al7Zauo6tf68eGWK2QE08gRQUGwbhC9XkkxVqz0jJv09nGBEZRflI5AmGUAb
 +DAzKlDB5OnjC1kSSqhmrLDowxoeNdmJzmUStALAIDa7ywyrnFsfGBEpTRecAn4d8
 +hL8GkJnaCvLkgbt2FxbJfPHFrT3XmoMv+uVnET/ZVne0rbA95K7SegVPL5Ob7w8+
 +fcW8UQKCAQEAtZCLLcKwYIbzFyRRqt8Q7V4WjAivy8fMbOC4oSDIPM/iIP3CsMxF
 +XRANkJ4ilo5reS8sWaV/KKStxD7h5d8sCFyzp+5QlLdJUWsxNjUkDClmdXWwIXuI
 +GCEb63Q4C1FNdekEsNP51BorCMIB/9nE/2m7Ca4rc7ygAq8ADQ8mMubcHJtlgrYR
 +JZwWPU4sY3tv4seynBseLq8XGJ4RIdn9H1nFf02V5UfMDvxhB87TrsiRXYNX4U58
 +xkj28BC7WM1lEudX9k0+n/27serXwNsKxh4sxTviAxpy3E1H1lEeH71y9UJzTxHC
 +7exaiteIR42IqOOdTefY5oO7tLg7cZqYtQKCAQA4Fpbl/101OWzNLqgeS0csmRwh
 +o5xBcruthSFRVT+gbtB3HSa0ImW69YofutC1FNdekEsNP51BorCMIBtcXaGFHXx3
 +1aTxVTN1bWtcqzeV9zLvxQ39FWRZczKQzf2eSEQcO3MQJu3X+F1dbcpuWKHOg6S9
 +QKgUAh7HeTb9A+/WTzuHVUllNvRJtgk6lSDEBMHHrisLBav5AguBSl+Rbva0wvI7
 +wm+bdTNKhHvZ7tepw8wwD321Iv82me7afNMjlV2OLy0OZ5jjXLJIXcV1QTIikIUm
 +MeXU1e4o7RXZ6IjxvjPObtcEJYy0etm3AkKo+Ql/PTn4QG+p7D3gWVKRbMXn
 +-----END RSA PRIVATE KEY-----</file>
 +  - **[[centos:mail_c7:mta_5#zertifikatserstellung|Zertifikat]]:** \\ Das Serverzertifikat, welches wir von der ausstellenden CA erhalten haben, legen wir im Verzeichnis //**/etc/pki/postfix/certs/**// ab. In unserem Konfigurationsbeispiel wäre das die Datei **rapidssl_2015-10-15_mx01.nausch.org.certificate.pem**. \\ \\ <code> # vim /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem</code> <file /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem>-----BEGIN CERTIFICATE-----
 +MIIFoDCCBIigAwIBAgICKRAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVVMx
 +FjAUBgNVBAoTDUdlb1RydXN0IEluYy4xIDAeBgNVBAMTF1JhcGlkU1NMIFNIQTI1
 +NiBDQSAtIEc0MB4XDTE1MTAxNDIyMjA1M1oXDTE3MTAxNTE2MDkxMVowgZMxEzAR
 +BgNVBAsTCkdUMjI2Njc5NDExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29t
 +L3Jlc291cmNlcy9jcHMgKGMpMTUxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZh
 +bGlkYXRlZCAtIFJhcGlkU1NMKFIpMRgwFgYDVQQDEw9teDAxLm5hdXNjaC5vcmcw
 +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXjwLCvdn28r0ja5zWJhkr
 +2FtxGipH/3/p81FccAlFgHXg4a98E11VEOfH7mjJqi3a6hx+MQDGD78aSxpqAE2c
 +M5No3fONVr3cFoj/IVVUG+EwMOSr22l/jfKmMqlkEIv44TdIKsbdbr+loZAFw15H
 +aUiqFsPWw++O/T19OZKJjep/W/wWFFSkuTV5eMBKHEanIfpetv3Eru2KyGKtIe4I
 +iFeG2NLM1lB4yD7zJ9utCnNEr/O/Gicc1fURYLQNLnj7lRRPoRvpDyQrnjn7z9e7
 +lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv
 +AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/3G4KPG
 +KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir
 +0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/l2QVs/Iz5utQXdB
 +ke/qYcCCV5NCdRpNEZ8F9wTOSL9MK1mV/rogEQUjujgjfB4P674NF9XLlLaYBfAK
 +ov1BPKp/+xqw0aWyGUO+Gt2n/MevebUQgPhSm6y5J1naioVbO1T5mcpANGGqM0fV
 +iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ
 +sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw
 +Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t
 +L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
 +AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg
 +HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG
 +A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh
 +cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6
 +k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn
 +X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep
 +A0pY4peiKrrCDGvW6/G2Bx8KXpOjUlNC7GGZxK9ZOVvCe8l5fZFT/II4dEYiU/bJ
 +Md2v5ayCTGAt8S5ITz/6o0MALtIB9M0/AyqqxFKLinIqOAoKxWE+4fO6J3t+YOGp
 +eVH+n//PADBewKZZF43KSROsqM6fE4DeRdUk77Tp9LyCoKdPFHo04XHmE0iyBT6h
 +x5L03w==
 +-----END CERTIFICATE-----</file>
 +  - **[[centos:mail_c7:mta_5#zertifizierungspfad_beim_ssl_zertificate_trusted_chain|CA-Zertifikate]]**: \\ Da wir nicht sicher sein können, dass der einliefernde SMTP-Client alle notwendigen Zwischenzertifikate in seinem [[centos:mail_c7:mta_5#vertrauensmodelle_in_public-key-infrastrukturen|trusted Root CA Store]] vorhält, müssen wir diese dem Postfix-SMTP-Daemon bekannt geben, damit der Daemon diese beim Aushandeln der TLS-Verschlüsselung auch [[centos:mail_c7:mta_5#zertifizierungspfad_beim_ssl_zertificate_trusted_chain|diese Zertifikate]] dem SMTP-Client bekannt geben kann. \\ \\ Alle nötigen CA-Zertifikate legen wir nun nacheinander in einer Datei ab und zwar in der Reihenfolge vom Serverzertifikat in Richtung des obersten Root-Zertifikates der CA ab. Wenn wir nicht sicher sind welche Zwischenzertifikate genau benötigt werden, ermitteln wir diese wie folgt. Als erstes ermitteln wir, mit welchem Zertifikat unser Serverzertifikat signiert wurde. \\ \\ <code> # openssl x509 -subject -issuer -dates -noout -in /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem</code> <code>subject= /OU=GT22667941/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=mx01.nausch.org
 +issuer= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +notBefore=Oct 14 22:20:53 2015 GMT
 +notAfter=Oct 15 16:09:11 2017 GMT</code> Wir benötigen also das Zertifikat des **CN=//RapidSSL SHA256 CA - G4//**. Wir besorgen uns nun dieses Root-Zertifikat von der **CA=//GeoTrust Inc.//**. Auch bei diesem Zertifikat überprüfen wir nun, ob es sich um das selbstsignierte Root-Zertifikat der CA handelt, oder ob dieses Zertifikat von einem anderen Root-Zertifikat signiert wurde. \\ <code> # openssl x509 -subject -issuer -dates -noout -in /etc/pki/postfix/certs/RapidSSL_SHA256_CA_-_G4.pem</code> <code>subject= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +notBefore=Jun 30 00:00:00 2015 GMT
 +notAfter=Jun 29 23:59:59 2025 GMT</code> Da sich **subject** und **issuer** unterscheiden, wissen wir nun, dass es sich bei dem Zertifikate **RapidSSL_SHA256_CA_-_G4.pem** um ein Intermediate-Zertifikat handelt und wir uns das Zertifikat **GeoTrust_Primary_Certification_Authority_-_G3.pem** besorgen müssen. Wir besorgen uns nun auch noch dieses Root-Zertifikat von der **CA=//GeoTrust Primary Certification Authority - G3//**. Haben wir dieses Zertifikat gefunden, ermitteln wir auch hier, ob es sich um das selbstsignierte Root-Zertifikat der CA handelt, oder ob dieses Zertifikat von einem anderen Root-Zertifikat signiert wurde. \\ <code> # openssl x509 -subject -issuer -dates -noout -in /etc/pki/postfix/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem</code><code>subject= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +notBefore=Apr  2 00:00:00 2008 GMT
 +notAfter=Dec  1 23:59:59 2037 GMT
 +</code> Da sich hier nun **subject** und **issuer** **__nicht__** unterscheiden, wissen wir, es handelt sich hier um das selbstsignierte Root-Zertifikat der CA! <WRAP center round tip 80%>
 +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! 
 +</WRAP> Wir haben also nun drei Zertifikatsdateien mit folgendem Inhalt: <code> # vim /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem</code> <file bash /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem># subject= /OU=GT22667941/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=mx01.nausch.org
 +# issuer= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +# 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/3/p81FccAlFgHXg4a98E11VEOfH7mjJqi3a6hx+MQDGD78aSxpqAE2c
 +M5No3fONVr3cFoj/IVVUG+EwMOSr22l/jfKmMqlkEIv44TdIKsbdbr+loZAFw15H
 +aUiqFsPWw++O/T19OZKJjep/W/wWFFSkuTV5eMBKHEanIfpetv3Eru2KyGKtIe4I
 +iFeG2NLM1lB4yD7zJ9utCnNEr/O/Gicc1fURYLQNLnj7lRRPoRvpDyQrnjn7z9e7
 +lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv
 +AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/3G4KPG
 +KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir
 +0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/l2QVs/Iz5utQXdB
 +ke/qYcCCV5NCdRpNEZ8F9wTOSL9MK1mV/rogEQUjujgjfB4P674NF9XLlLaYBfAK
 +ov1BPKp/+xqw0aWyGUO+Gt2n/MevebUQgPhSm6y5J1naioVbO1T5mcpANGGqM0fV
 +iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ
 +sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw
 +Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t
 +L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG
 +AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg
 +HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG
 +A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh
 +cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6
 +k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn
 +X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep
 +A0pY4peiKrrCDGvW6/G2Bx8KXpOjUlNC7GGZxK9ZOVvCe8l5fZFT/II4dEYiU/bJ
 +Md2v5ayCTGAt8S5ITz/6o0MALtIB9M0/AyqqxFKLinIqOAoKxWE+4fO6J3t+YOGp
 +eVH+n//PADBewKZZF43KSROsqM6fE4DeRdUk77Tp9LyCoKdPFHo04XHmE0iyBT6h
 +x5L03w==
 +-----END CERTIFICATE-----</file> <code> # vim vim /etc/pki/postfix/certs/RapidSSL_SHA256_CA_-_G4.pem> </code> <file bash /etc/pki/postfix/certs/RapidSSL_SHA256_CA_-_G4.pem># subject= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# 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/7deEXO5d0VSZ0auxNwkgYl2CsqhbGZzBIKq9XBsXxuaAHlG1n96Jhcw
 +zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/FqfSoR2x6fjOPEBmnhHYhFOdFuVdiq
 +t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg
 +MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB
 +/wIBADBJBgNVHSAEQjBAMD4GBmeBDAECATA0MDIGCCsGAQUFBwIBFiZodHRwczov
 +L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn
 +hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW
 +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
 +FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb
 +lD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQDDftiDSwRMVSkqTxSdmm7ekHDBpCZM
 +iI54SO+9nLCg9fBm/P5ZJuF578i3YGSoi0fqL+CDmdpBGdfFvgX68pAR8Ar/bNwF
 +tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/QQuRdiyxvhCmfxUCE5LgF85N7qV
 +TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA
 +2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/GLnFH4xhBs0lNPYowRAD6I37/m0sxwve0l
 +nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/94ySa
 +-----END CERTIFICATE-----</file> <code> # vim /etc/pki/postfix/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem> </code><file bash /etc/pki/postfix/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem># subject= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# notBefore=Apr  2 00:00:00 2008 GMT
 +# notAfter=Dec  1 23:59:59 2037 GMT
 +-----BEGIN CERTIFICATE-----
 +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
 +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
 +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
 +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
 +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
 +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
 +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
 +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
 ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
 +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
 +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
 +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
 +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
 +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
 +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
 +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
 +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
 +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
 +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
 +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
 +spki4cErx5z481+oghLrGREt
 +-----END CERTIFICATE-----</file> Wir können nun die Root-Zertifikate unserem Postfix auf zwei Arten zur Verfügung stellen:
 +    - **certificate_chain**: Hierzu kopieren wir die beiden Root-Zertifikate in eine Datei und weisen diese Datei dann später dem Postfix-Parameter **smtpd_tls_CAfile** zu. <html><br><br></html> <code> # cat /etc/pki/postfix/certs/RapidSSL_SHA256_CA_-_G4.pem \
 +       /etc/pki/postfix/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem > \
 +       /etc/pki/postfix/certs/RapidSSL_ca_certificate_chain.pem</code> Als Ergebnis erhalten wir nun: <code> # vim /etc/pki/postfix/certs/RapidSSL_ca_certificate_chain.pem</code> <file bash /etc/pki/postfix/certs/RapidSSL_ca_certificate_chain.pem># subject= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# 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/7deEXO5d0VSZ0auxNwkgYl2CsqhbGZzBIKq9XBsXxuaAHlG1n96Jhcw
 +zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/FqfSoR2x6fjOPEBmnhHYhFOdFuVdiq
 +t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg
 +MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB
 +/wIBADBJBgNVHSAEQjBAMD4GBmeBDAECATA0MDIGCCsGAQUFBwIBFiZodHRwczov
 +L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn
 +hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW
 +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
 +FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb
 +lD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQDDftiDSwRMVSkqTxSdmm7ekHDBpCZM
 +iI54SO+9nLCg9fBm/P5ZJuF578i3YGSoi0fqL+CDmdpBGdfFvgX68pAR8Ar/bNwF
 +tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/QQuRdiyxvhCmfxUCE5LgF85N7qV
 +TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA
 +2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/GLnFH4xhBs0lNPYowRAD6I37/m0sxwve0l
 +nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/94ySa
 +-----END CERTIFICATE-----
 +# subject= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# notBefore=Apr  2 00:00:00 2008 GMT
 +# notAfter=Dec  1 23:59:59 2037 GMT
 +-----BEGIN CERTIFICATE-----
 +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
 +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
 +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
 +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
 +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
 +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
 +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
 +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
 ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
 +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
 +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
 +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
 +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
 +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
 +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
 +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
 +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
 +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
 +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
 +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
 +spki4cErx5z481+oghLrGREt
 +-----END CERTIFICATE-----</file> 
 +    - **full_certificate_chain**: Hier kopieren wir nun unser Serverzertifikat, gefolgt vom Intermediate Zertifikat und dem Root-CA Zertifikat in eine Datei. Diese Datei weisen wir dann dem Postfix Parameter **smtpd_tls_cert_file** zu. <html><br><br></html> <code> # cat /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem \
 +       /etc/pki/postfix/certs/RapidSSL_SHA256_CA_-_G4.pem \
 +       /etc/pki/postfix/certs/GeoTrust_Primary_Certification_Authority_-_G3.pem > \
 +       /etc/pki/postfix/rapidssl_2015-10-15_mx01.nausch.org.full_certificate_chain.pem</code> Als Ergebnis erhalten wir nun: <code> # vim /etc/pki/postfix/rapidssl_2015-10-15_mx01.nausch.org.full_certificate_chain.pem</code> <file bash /etc/pki/postfix/rapidssl_2015-10-15_mx01.nausch.org.full_certificate_chain.pem># subject= /OU=GT22667941/OU=See www.rapidssl.com/resources/cps (c)15/OU=Domain Control Validated - RapidSSL(R)/CN=mx01.nausch.org
 +# issuer= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4                                                                        
 +# 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/3/p81FccAlFgHXg4a98E11VEOfH7mjJqi3a6hx+MQDGD78aSxpqAE2c                                                                  
 +M5No3fONVr3cFoj/IVVUG+EwMOSr22l/jfKmMqlkEIv44TdIKsbdbr+loZAFw15H                                                                  
 +aUiqFsPWw++O/T19OZKJjep/W/wWFFSkuTV5eMBKHEanIfpetv3Eru2KyGKtIe4I                                                                  
 +iFeG2NLM1lB4yD7zJ9utCnNEr/O/Gicc1fURYLQNLnj7lRRPoRvpDyQrnjn7z9e7                                                                  
 +lXgg2yX487dIedYZ2gUasbux9tWB8iEXCd+zKH722unlZN5UW7jSbOztZlEcBNuv                                                                  
 +AVmongX9Qqm8i4MewB1lCm9nLxQfvgybjHJTwiRTxHWWHVNUbJ5RqsxF5/3G4KPG                                                                  
 +KirBvDqQdyN+SZjg4j5eUA7sEgkRV7ZFWhy+OogB5CkWvek5cKDf3T921ZNx0pir                                                                  
 +0lQEktWy8j6JnVu0cfYOjeWwjU6gGam9zu2zBFWnnTVkI+A6/l2QVs/Iz5utQXdB                                                                  
 +ke/qYcCCV5NCdRpNEZ8F9wTOSL9MK1mV/rogEQUjujgjfB4P674NF9XLlLaYBfAK                                                                  
 +ov1BPKp/+xqw0aWyGUO+Gt2n/MevebUQgPhSm6y5J1naioVbO1T5mcpANGGqM0fV                                                                  
 +iERkm7rqiDhfeHOMvbLw6QIDAQABo4IBRzCCAUMwHwYDVR0jBBgwFoAU87VWDMQJ                                                                  
 +sLTPH6r53SNW8HfoofkwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRw                                                                  
 +Oi8vZ3ouc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vZ3ouc3ltY2IuY29t                                                                  
 +L2d6LmNydDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG                                                                  
 +AQUFBwMCMBoGA1UdEQQTMBGCD214MDEubmF1c2NoLm9yZzArBgNVHR8EJDAiMCCg                                                                  
 +HqAchhpodHRwOi8vZ3ouc3ltY2IuY29tL2d6LmNybDAMBgNVHRMBAf8EAjAAMEEG                                                                  
 +A1UdIAQ6MDgwNgYGZ4EMAQIBMCwwKgYIKwYBBQUHAgEWHmh0dHBzOi8vd3d3LnJh                                                                  
 +cGlkc3NsLmNvbS9sZWdhbDANBgkqhkiG9w0BAQsFAAOCAQEAI741GwJW1MPFpzn6                                                                  
 +k0KavUzJp9uybjbRGrH1p1HbKX7nMj93qO7BcN6x3aXVxAe5bDPhK7flmlAwIAyn                                                                  
 +X+EVjC0uV10zY75uY8jfyQ2j7qi2FMMWsa98kWMPzxkU9k7DXDSNIXvhoPhfT9ep                                                                  
 +A0pY4peiKrrCDGvW6/G2Bx8KXpOjUlNC7GGZxK9ZOVvCe8l5fZFT/II4dEYiU/bJ                                                                  
 +Md2v5ayCTGAt8S5ITz/6o0MALtIB9M0/AyqqxFKLinIqOAoKxWE+4fO6J3t+YOGp                                                                  
 +eVH+n//PADBewKZZF43KSROsqM6fE4DeRdUk77Tp9LyCoKdPFHo04XHmE0iyBT6h                                                                  
 +x5L03w==                                                                                                                          
 +-----END CERTIFICATE-----                                                                                                         
 +# subject= /C=US/O=GeoTrust Inc./CN=RapidSSL SHA256 CA - G4
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# 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/7deEXO5d0VSZ0auxNwkgYl2CsqhbGZzBIKq9XBsXxuaAHlG1n96Jhcw
 +zzlLLHTZiUR2ENDt94u7iQV1TQsNs9rpv/FqfSoR2x6fjOPEBmnhHYhFOdFuVdiq
 +t5tv6vTerBcRkl1Am4N7muL3qQIDAQABo4IBOjCCATYwLgYIKwYBBQUHAQEEIjAg
 +MB4GCCsGAQUFBzABhhJodHRwOi8vZy5zeW1jZC5jb20wEgYDVR0TAQH/BAgwBgEB
 +/wIBADBJBgNVHSAEQjBAMD4GBmeBDAECATA0MDIGCCsGAQUFBwIBFiZodHRwczov
 +L3d3dy5nZW90cnVzdC5jb20vcmVzb3VyY2VzL2NwczA2BgNVHR8ELzAtMCugKaAn
 +hiVodHRwOi8vZy5zeW1jYi5jb20vR2VvVHJ1c3RQQ0EtRzMuY3JsMB0GA1UdJQQW
 +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
 +FPO1VgzECbC0zx+q+d0jVvB36KH5MB8GA1UdIwQYMBaAFMR5yo6hTgMdHNxr2zFb
 +lD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQDDftiDSwRMVSkqTxSdmm7ekHDBpCZM
 +iI54SO+9nLCg9fBm/P5ZJuF578i3YGSoi0fqL+CDmdpBGdfFvgX68pAR8Ar/bNwF
 +tNgGb6Rvjb4gK1Tb+aJFg5oepSGJNR18IFwX/QQuRdiyxvhCmfxUCE5LgF85N7qV
 +TqY3Cp6TXodb6ZDWqLZlCI1hSeuDIKldGxZgYmsvVPtaAg16J+JL4QUUwuTp+XDA
 +2fc0ZQ6ikUusKPK3CA+Yytc+cLbIC/GLnFH4xhBs0lNPYowRAD6I37/m0sxwve0l
 +nPvdJAq9WZFKQgM4EnEyiHagjny7Mu+IKhvUam9QuVJni6sw+h/94ySa
 +-----END CERTIFICATE-----
 +# subject= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# issuer= /C=US/O=GeoTrust Inc./OU=(c) 2008 GeoTrust Inc. - For authorized use only/CN=GeoTrust Primary Certification Authority - G3
 +# notBefore=Apr  2 00:00:00 2008 GMT
 +# notAfter=Dec  1 23:59:59 2037 GMT
 +-----BEGIN CERTIFICATE-----
 +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
 +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
 +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
 +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
 +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
 +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
 +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
 +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
 ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
 +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
 +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
 +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
 +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
 +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
 +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
 +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
 +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
 +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
 +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
 +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
 +spki4cErx5z481+oghLrGREt
 +-----END CERTIFICATE-----</file>
 +    * Variante **a**: Hier weisen wir dem Postfix-Parameter **smtpd_tls_cert_file** der Datei zu, in dem sich "nur" das Serverzertifikat befindet. Beim Parameter **smtpd_tls_CAfile** verweisen wir auf die Datei mit den beiden Root-Zertifikats-Kette zu. <html><br><br></html> <code bash># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen
 +#          (Postfixbuch: Kapitel 20.2)
 +#          Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon
 +#          Konfigurationsbeispiel "a" bei dem das Serverzertifikat und die beiden 
 +#          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 = /etc/pki/postfix/private/mx01.nausch.org.serverkey_151015.pem
 +smtpd_tls_cert_file = /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.certificate.pem
 +smtpd_tls_CAfile = /etc/pki/postfix/certs/RapidSSL_ca_certificate_chain.pem
 +</code>
 +    * 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! <html><br><br></html> <code bash># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen
 +#          (Postfixbuch: Kapitel 20.2)
 +#          Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon
 +#          Konfigurationsbeispiel "b" bei dem das Serverzertifikat und die beiden 
 +#          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 = /etc/pki/postfix/private/mx01.nausch.org.serverkey_151015.pem
 +smtpd_tls_cert_file = /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.full_certificate_chain.pem
 +smtpd_tls_CAfile = 
 +</code>
 +
 +Haben die Konfiguration werden Informationen zur TLS-Verschlüsselung im Mailheader der angenommenen Nachrichten eingefügt, vorausgesetzt wir haben den Parameter **[[centos:mail_c7:mta_5#informationen_im_mailheader_zur_verschluesselung|smtpd_tls_received_header]] = //yes//** gesetzt. Nachfolgendes Beispiel zeigt einen solchen Eintrag:
 +<html><pre class="code">Received: from mx1.piratenpartei-bayern.de (mx1.piratenpartei-bayern.de [88.198.212.215])
 +   (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 +   <font style="color: rgb(178, 24, 24)"><b>(No client certificate requested)</b></font>
 +   by mx01.nausch.org (Postfix) with ESMTPS id 3F887C00088
 +   for <michael@nausch.org>; Thu, 22 Oct 2015 12:01:32 +0200 (CEST)</pre></html>
 +
 +Der Zusatz <html><font style="color: rgb(178, 24, 24)"><b>(No client certificate requested)</b></font></html> weisst darauf hin, dass der SMTP-Daemon nicht nach einem Zertifikat gefragt hatte. Ein Klient wird nur dann sein Client-Zertifikat zum Server schicken, wenn dieser explizit danach frägt. Diese Funktion können wir jedoch aktivieren, in dem wir den Postfix Parameter **smtpd_tls_ask_ccert = //yes//** setzen.
 +
 +<code># Django : 2015-02-23 - Remote Client nach einem Zertifikat fragen
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_ask_ccert
 +# default: smtpd_tls_ask_ccert = no
 +smtpd_tls_ask_ccert = yes
 +</code>
 +
 +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.
 +
 +<html><pre class="code">Received: from mx1.piratenpartei-bayern.de (mx1.piratenpartei-bayern.de [88.198.212.215])
 +   (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 +   (<font style="color: rgb(30, 180, 29)"><b>Client CN "*.piratenpartei-bayern.de", Issuer "PositiveSSL CA 2"</b></font> <font style="color: rgb(178, 24, 24)"><b>(not verified)</b></font>)
 +   by mx01.nausch.org (Postfix) with ESMTPS id 57BD3C00088
 +    for <michael@nausch.org>; Thu, 22 Oct 2015 12:28:30 +0200 (CEST)</pre></html>
 +
 +Im Mailheader sehen wir nun, dass sich der Client mit einem Zertifikat von <html><font style="color: rgb(30, 180, 29)"><b>Client CN "*.piratenpartei-bayern.de", Issuer "PositiveSSL CA 2"</b></font></html> ausgewiesen hatte. Der Zusatz <html><font style="color: rgb(178, 24, 24)"><b>(not verified)</b></font></html>wird noch angezeigt, da wir (noch) nicht die benötigten Rootzertifikate in unserem **[[centos:mail_c7:mta_5#zertifizierungspfad_beim_ssl_zertificate_trusted_chain|Truststore verankert]]** haben. Sobald wir die Zertifikate unserer wichtigsten Kommunikationspartner zu den vertrauenswürdigen Root-Zertifikaten hinzugefügt und die CAcert-Datei //**/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem**// erstellt haben, müssen wir dem SMTP-Daemon noch sagen, das er zur Verifizierung diese Datei verwenden soll. Hier zeigt es sich dann auch als Vorteil, wenn wir unser Serverzertifikat zusammen mit den CA-Root-Zertifikaten in einer Datei angelegt und dem Postfix-Parameter **smtpd_tls_cert_file** übergeben haben.
 +<code bash># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen
 +#          (Postfixbuch: Kapitel 20.2)
 +#          Pfade für die Key- und Zertifikatsdateien für den SMTP-Daemon
 +#          Konfigurationsbeispiel "a" bei dem das Serverzertifikat und die beiden 
 +#          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 = /etc/pki/postfix/private/mx01.nausch.org.serverkey_151015.pem
 +smtpd_tls_cert_file = /etc/pki/postfix/certs/rapidssl_2015-10-15_mx01.nausch.org.full_certificate_chain.pem
 +smtpd_tls_CAfile = /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
 +</code>
 +
 +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, ob die Zertifikatskette lückenlos und vertrauenswürdig ist.
 +
 +<html><pre class="code">Received: from mx1.piratenpartei-bayern.de (mx1.piratenpartei-bayern.de [88.198.212.215])
 +   (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 +   (<font style="color: rgb(30, 180, 29)"><b>Client CN "*.piratenpartei-bayern.de", Issuer "PositiveSSL CA 2" (verified OK)</b></font>)
 +   by mx01.nausch.org (Postfix) with ESMTPS id A490AC00088
 +   for <michael@nausch.org>; Thu, 22 Oct 2015 13:48:13 +0200 (CEST)</pre></html>
 +
 +Nachdem nun sowohl das Zertifikat und auch die Validierung des selbigen O.K. bzw. "grün" ist, können wir das Kapitel //**[[centos:mail_c7:mta_5#smtp-daemon_empfang_von_emails|SMTP-Daemon (Empfang von eMails)]]**// schließen und uns dem nächsten Punkt //**[[centos:mail_c7:mta_5#smtp-client_versand_von_emails|SMTP-Client (Versand von eMails)]]**//.
 +
 +=== 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:mail_c7:mta_5#verschluesselung_beim_smtp-client|TLS-Verschlüsselung des SMTP-Clients]]** aktiviert, sieht der Empfänger die Verschlüsselung in den Mailheadern, vorausgesetzt der Postmaster des Zielsystems hat diese Funktion bei seinem MTA auch aktiviert.
 +
 +<html><pre class="code">Received: from mx01.nausch.org (mx01.nausch.org [217.91.103.190])
 +   (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 +   <font style="color: rgb(178, 24, 24)"><b>(Client did not present a certificate)</b></font>
 +   by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS</pre></html>
 +
 +Der Zusatz <html><font style="color: rgb(178, 24, 24)"><b>(Client did not present a certificate)</b></font></html> weisst darauf hin, dass unser SMTP-Client **kein** Zertifikat übertragen hat. Nachdem wir noch kein Zertifikat unseren SMTP-Client bekannt gegeben haben, ist dieser Hinweis einfach zu erklären.
 +
 +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.
 +
 +<code># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen
 +#          (Postfixbuch: Kapitel 20.2)
 +#          Pfade für die Key- und Zertifikatsdateien für den SMTP-Client
 +#          Konfigurationsbeispiel "b" bei dem das Serverzertifikat und die beiden 
 +#          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   = $smtpd_tls_key_file
 +smtp_tls_cert_file  = $smtpd_tls_cert_file
 +smtp_tls_CAfile     =
 +</code>
 +
 +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 <html><font style="color: rgb(30, 180, 29)"><b>Client CN "mx01.nausch.org", Issuer "RapidSSL SHA256 CA - G4"</b></font></html> gemeldet hatte, da der Zielserver nach diesem fragte. Vertraut der Empfänger der Zertifikatskette wird auch ein Verify mit positivem Ergebnis <html><font style="color: rgb(30, 180, 29)"><b>verified OK</b></font></html> beendet. 
 +
 +<html><pre class="code">from mx01.nausch.org (mx01.nausch.org [217.91.103.190])
 +   (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 +   (<font style="color: rgb(30, 180, 29)"><b>Client CN "mx01.nausch.org", Issuer "RapidSSL SHA256 CA - G4" (verified OK)</b></font>)
 +   by mx1.piratenpartei-bayern.de (Postfix) with ESMTPS
 +   for <dj4n90@piraten-ebersberg.de>; Thu, 22 Oct 2015 14:38:38 +0200 (CEST)</pre></html>
 +
 +Da wir unserem SMTP-Client noch keine Root-CA-Zertifikate an die Hand gegeben haben, kann dieser auch nicht prüfen, ob dem Serverzertifikat, welches ihm der SMTP-Daemon des Zielservers übermittelte, vertraut werden kann. Im Maillog unseres Servers sehen wir auch dass eine "**Untrusted TLS connection established to**" erfolgte.
 +
 +
 +<html><pre class="code">Oct 22 14:38:38 vml000087 postfix/smtp[2640]: <html><font style="color: rgb(178, 24, 24)"><b>Untrusted</b></font> TLS connection established to mx1.piratenpartei-bayern.de[88.198.212.215]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)</pre></html>
 +
 +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.
 +
 +<code># Django : 2014-10-19 - SSL/TLS - Schutz durch verschlüsselte Verbindungen
 +#          (Postfixbuch: Kapitel 20.2)
 +#          Pfade für die Key- und Zertifikatsdateien für den SMTP-Client
 +#          Konfigurationsbeispiel "b" bei dem das Serverzertifikat und die beiden 
 +#          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   = $smtpd_tls_key_file
 +smtp_tls_cert_file  = $smtpd_tls_cert_file
 +smtp_tls_CAfile     = $smtpd_tls_CAfile
 +</code>
 +
 +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 <html><font style="color: rgb(30, 180, 29)"><b>Trusted</b></font></html> vermewrkt.
 +
 +<html><pre class="code">Oct 22 15:06:55 vml000087 postfix/smtp[9255]: <font style="color: rgb(30, 180, 29)"><b>Trusted</b></font> TLS connection established to mx1.piratenpartei-bayern.de[88.198.212.215]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)</pre></html>
 +
 +==== 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" sorgt dabei für maximale Interoperabilität. Folgende Werte können dabei gesetzt werden.
 +  * **export** Aktiviert "//export//-grade" oder bessere OpenSSL Chiffren. \\ ''tls_export_cipherlist = aNULL:-aNULL:ALL:+RC4:@STRENGTH''
 +  * **low** Aktiviert "//low//-grade" oder bessere OpenSSL Chiffren. \\ ''tls_low_cipherlist = aNULL:-aNULL:ALL:!EXPORT:+RC4:@STRENGTH''
 +  * **medium** Aktiviert "//medium//-grade" oder bessere OpenSSL Chiffren. \\ ''tls_medium_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH''
 +  * **high** Aktiviert "//high//-grade" oder bessere OpenSSL Chiffren. \\ ''tls_high_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH''
 +  * **null** Aktiviert lediglich die "//NULL//" OpenSSL Chiffren und stellt so nur Authentifizierung ohne Verschlüsselung zur Verfügung. \\ ''tls_null_cipherlist = eNULL:!aNULL''
 +
 +<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!
 +</WRAP>
 +
 +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://www.postfix.org/postconf.5.html#smtpd_tls_ciphers
 +# default: smtpd_tls_ciphers = export
 +</code>
 +
 +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://www.postfix.org/postconf.5.html#smtp_tls_ciphers
 +# default: smtp_tls_ciphers = export
 +</code>
 +
 +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, die bei allen TLS 
 +#          Sicherheitsstufen des Postfix SMTP-Daemon ausgeschlossen werden sollen.
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_exclude_ciphers
 +# default: smtpd_tls_exclude_ciphers = 
 +smtpd_tls_exclude_ciphers =
 +           aNULL
 +           eNULL
 +           EXPORT
 +           DES
 +           3DES
 +           RC4
 +           MD5
 +           PSK
 +           aECDH
 +           EDH-DSS-DES-CBC3-SHA
 +           EDH-RSA-DES-CDC3-SHA
 +           KRB5-DE5
 +           CBC3-SHA
 +</code>
 +
 +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://www.postfix.org/postconf.5.html#smtp_tls_exclude_ciphers
 +# default: smtp_tls_exclude_ciphers = 
 +smtp_tls_exclude_ciphers =
 +           aNULL
 +           eNULL
 +           EXPORT
 +           DES
 +           3DES
 +           RC4
 +           MD5
 +           PSK
 +           aECDH
 +           EDH-DSS-DES-CBC3-SHA
 +           EDH-RSA-DES-CDC3-SHA
 +           KRB5-DE5
 +           CBC3-SHA
 +           AES128-SHA
 +           DHE-RSA-AES128-SHA
 +           AES256-SHA
 +           DHE-RSA-AES256-SHA
 +           CAMELLIA128-SHA
 +           DHE-RSA-CAMELLIA128-SHA
 +           CAMELLIA256-SHA
 +           DHE-RSA-CAMELLIA256-SHA
 +           ECDHE-RSA-AES128-SHA
 +           ECDHE-RSA-AES256-SHA
 +</code>
 +
 +=== 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://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_ciphers
 +# default: smtpd_tls_mandatory_ciphers = medium
 +smtpd_tls_mandatory_ciphers = high</code>
 +
 +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://www.postfix.org/postconf.5.html#smtp_tls_mandatory_ciphers
 +# default: smtp_tls_mandatory_ciphers = medium
 +smtp_tls_mandatory_ciphers = high</code>
 +
 +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://tools.ietf.org/rfc/rfc7465.txt|RFC 7465]] wird unter anderem die Verwendung des RC4 Algorithmus explizit mit **MUST NOT** verboten.
 +
 +<code bash># Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung
 +#          des postfix SMTP-Daemons.
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_exclude_ciphers
 +# default: smtpd_tls_mandatory_exclude_ciphers =
 +smtpd_tls_mandatory_exclude_ciphers =
 +           aNULL
 +           eNULL
 +           EXPORT
 +           DES
 +           RC4
 +           MD5
 +           PSK
 +           aECDH
 +           EDH-DSS-DES-CBC3-SHA
 +           EDH-RSA-DES-CDC3-SHA
 +           KRB5-DE5
 +           CBC3-SHA</code>
 +
 +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://tools.ietf.org/rfc/rfc7465.txt|RFC 7465]] wird unter anderem die Verwendung des RC4 Algorithmus explizit mit **MUST NOT** verboten.
 +
 +
 +<code bash># Django : 2014-10-19 - Ausschlussliste der verpflichtenden TLS Verschlüsselung
 +#          des postfix SMTP-Clients.
 +#          http://www.postfix.org/postconf.5.html#smtp_tls_mandatory_exclude_ciphers
 +# default: smtp_tls_mandatory_exclude_ciphers =
 +smtp_tls_mandatory_exclude_ciphers =
 +smtp_tls_exclude_ciphers =
 +           aNULL
 +           eNULL
 +           EXPORT
 +           DES
 +           RC4
 +           MD5
 +           PSK
 +           aECDH
 +           EDH-DSS-DES-CBC3-SHA
 +           EDH-RSA-DES-CDC3-SHA
 +           KRB5-DE5
 +           CBC3-SHA
 +           AES128-SHA
 +           DHE-RSA-AES128-SHA
 +           AES256-SHA
 +           DHE-RSA-AES256-SHA
 +           CAMELLIA128-SHA
 +           DHE-RSA-CAMELLIA128-SHA
 +           CAMELLIA256-SHA
 +           DHE-RSA-CAMELLIA256-SHA
 +           ECDHE-RSA-AES128-SHA
 +           ECDHE-RSA-AES256-SHA</code>
 +
 +
 +==== 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-/Negativliste aller TLS-Protokolle, die der 
 +#          Postfix SMTP-Server bei der opportunischtischen Verschlüsselung
 +#          berücksichtigen soll.
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_protocols
 +# default: smtpd_tls_protocols = 
 +smtpd_tls_protocols = 
 +           !SSLv2 
 +           !SSLv3</code>
 +
 +Mit dem Parameter **smtp_tls_protocols** und **lmtp_tls_protocols** kann definiert werden, welche TLS Protokolle bei der opportunistischen Verschlüsselung des ausgehenden SMTP/LMTP-Verkehrs des Postfix SMTP Client ein- oder ausgeschlossen werden sollen.
 +<code bash># Django : 2014-10-19 - Positiv-/Negativliste aller TLS-Protokolle, die der 
 +#          Postfix SMTP-/LMTP-Client bei der opportunischtischen Verschlüsselung
 +#          berücksichtigen soll.
 +#          http://www.postfix.org/postconf.5.html#smtp_tls_protocols
 +# default: smtp_tls_protocols = !SSLv2 
 +#          lmtp_tls_protocols = !SSLv2
 +smtp_tls_protocols = 
 +           !SSLv2 
 +           !SSLv3
 +lmtp_tls_protocols = $smtp_tls_protocols</code>
 +
 +=== 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-/Negativliste aller TLS-Protokolle, die der 
 +#          Postfix SMTP-Server bei der verpflichtenden Verschlüsselung
 +#          berücksichtigen soll.
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_protocols
 +# default: smtpd_tls_mandatory_protocols = !SSLv2
 +smtpd_tls_mandatory_protocols = 
 +           !SSLv2
 +           !SSLv3</code>
 +
 +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/LMTP-Verkehrs beim Postfix SMTP Daemon ein- oder ausgeschlossen werden sollen.
 +
 +<code bash># Django : 2014-10-19 - Positiv-/Negativliste aller TLS-Protokolle, die der 
 +#          Postfix SMTP-/LMTP-Client bei der verpflichtenden Verschlüsselung
 +#          berücksichtigen soll.
 +#          http://www.postfix.org/postconf.5.html#smtp_tls_mandatory_protocols
 +# default: smtp_tls_mandatory_protocols = !SSLv2
 +smtp_tls_mandatory_protocols =
 +           !SSLv2
 +           !SSLv3
 +lmtp_tls_mandatory_protocols = $smtp_tls_mandatory_protocols</code>
 +
 +==== 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: Einliefernden SMTP-Clients wird STARTTLS angeboten, aber __nicht__ zwingend vorgeschrieben. Der Client bestimmt dann ob verschlüsselt gesprochen werden soll, oder nicht.
 +  * **encrypt**: Vorgeschriebene TLS Verschlüsselung: Einliefernden SMTP-Clients wird STARTTLS angeboten __und__ zwingend vorgeschrieben! Diese Einstellung ist aber gemäß [[https://tools.ietf.org/html/rfc2487|RFC 2487]] nur für dedizierte Mailserver zu wählen. Öffentlich erreichbare Mailserver müssen neben einer TLS-geschützen Übertragung auch PLAIN-TEXT Übertragungen zulassen!
 +
 +=== opportunistische Verschlüsselung ===
 +
 +Soll der SMTP-Daemon dem SMTP-Client eine TLS-Verschlüsselung anbieten, aber nicht zwingend vorschreiben, setzt man den Parameter **smtpd_tls_security_level=may**. Somit obliegt es dem SMTP-Client ob dieser mit einem **STARTTLS** die TLS-Verschlüsselung initiiert, oder nicht. Haben wir einen Mailserver, der auch aus dem Internet Nachrichten empfangen soll, ist dieses //"best practices"// Verfahren zu wählen.
 +
 +<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://www.postfix.org/postconf.5.html#smtpd_tls_security_level
 +#
 +#          Folgende Verschlüsselungsvarianten sind einstellbar:
 +#          none:    TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver-
 +#                   schlüsselt!
 +#
 +#          may :    Opportunistische TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der
 +#                   Client bestimmt dann ob verschlüsselt gesprochen werden soll,
 +#                   oder nicht.
 +#
 +#          encrypt: Vorgeschriebene TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten und zwingend vorgeschrieben! Diese
 +#                   Einstellung ist aber gemäß RFC 2487 nur für dedizierte Mailserver
 +#                   zu wählen. Öffentlich erreichbare Mailserver müssen neben einer
 +#                   TLS-geschützen Übertragung auch PLAIN-TEXT Übertragungen zulassen!
 +# default: smtpd_tls_security_level =
 +smtpd_tls_security_level = may
 +</code>
 +
 +=== verpflichtende Verschlüsselung für alle Clients ===
 +Betreibt man ein Mailgateway, welches ausschließlich Nachrichten von dedizierten Mailservern Nachrichten entgegen nimmt, setzt man den Parameter **smtpd_tls_security_level=encrypt**. Somit wird STARTTLS dem einliefernden SMTP-Clients angeboten und zwingend vorgeschrieben! Diese Einstellung darf gemäß [[https://tools.ietf.org/html/rfc2487|RFC 2487]] jedoch ausschliesslich für dedizierte Mailserver erlaubt. Öffentlich erreichbare Mailserver müssen neben einer TLS-geschützen Übertragung auch PLAIN-TEXT Übertragungen zulassen!
 +
 +<code># 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://www.postfix.org/postconf.5.html#smtpd_tls_security_level
 +#
 +#          Folgende Verschlüsselungsvarianten sind einstellbar:
 +#          none:    TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver-
 +#                   schlüsselt!
 +#
 +#          may :    Opportunistische TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der
 +#                   Client bestimmt dann ob verschlüsselt gesprochen werden soll,
 +#                   oder nicht.
 +#
 +#          encrypt: Vorgeschriebene TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten und zwingend vorgeschrieben! Diese
 +#                   Einstellung ist aber gemäß RFC 2487 nur für dedizierte Mailserver
 +#                   zu wählen. Öffentlich erreichbare Mailserver müssen neben einer
 +#                   TLS-geschützen Übertragung auch PLAIN-TEXT Übertragungen zulassen!
 +# default: smtpd_tls_security_level =
 +smtpd_tls_security_level = encrypt
 +</code>
 +
 +=== 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:mail_c7:mta_5#opportunistische_verschluesselung1|opportunistische TLS Transportverschlüsselung]])) wählen, damit auch Server, die warum auch immer kein TLS sprechen können, eine Chance haben Nachrichten zustellen zu können.
 +
 +Sehr wohl gibt es aber meist Kommunikationspartner, denen wir eine besondere Vertrauensstellung einräumen wollen oder gar müssen. Es gilt also die Devise, opportunistische Verschlüsselung jedem anbieten, der eine Nachricht bei uns abliefern möchte. Jedoch soll von einen oder mehreren Partnern eine verpflichtende Verschlüsselung zwingend vorgeschrieben werden, wenn diese eMails bei unserem MTA abliefern wollen.
 +
 +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.
 +
 +<code># 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://www.postfix.org/postconf.5.html#smtpd_tls_security_level
 +#
 +#          Folgende Verschlüsselungsvarianten sind einstellbar:
 +#          none:    TLS wird nicht genutzt; d.h. die Übertragung werden nicht ver-
 +#                   schlüsselt!
 +#
 +#          may :    Opportunistische TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten, aber nicht zwingend vorgeschrieben. Der
 +#                   Client bestimmt dann ob verschlüsselt gesprochen werden soll,
 +#                   oder nicht.
 +#
 +#          encrypt: Vorgeschriebene TLS Verschlüsselung: Einliefernden SMTP-Clients
 +#                   wird STARTTLS angeboten und zwingend vorgeschrieben! Diese
 +#                   Einstellung ist aber gemäß RFC 2487 nur für dedizierte Mailserver
 +#                   zu wählen. Öffentlich erreichbare Mailserver müssen neben einer
 +#                   TLS-geschützen Übertragung auch PLAIN-TEXT Übertragungen zulassen!
 +# default: smtpd_tls_security_level =
 +smtpd_tls_security_level = may
 +</code>
 +
 +Bei der [[centos:mail_c7:mta_4|Konfiguration]] unseres MTAs Postfix 2.11 unter CentOS7 haben wir in der Sektion **[[centos:mail_c7:mta_4#smtp_recipient_restrictions|SMTP Recipient Restrictions]]** mehrere **[[centos:mail_c7:mta_4#access-dateien|access]]**-Tabellen zum White-/Blacklisten von Sendern und Empfängern angelegt. 
 +
 +In der Lookup-Tabelle [[centos:mail_c7:mta_4#check_sender_access|sender_access]] werden wir all diejenigen Quellen aufnehmen, von denen wir **__nur__** eMails annehmen wollen, wenn die Übertragung mittels **STARTTLS** initiiert worden ist. Somit gilt für ausgewählte Kommunikationspartner eine **verpflichtende** und für alle anderen eine **opportunistische** Verschlüsselung.
 +   # vim /etc/postfix/access_sender
 +<file bash /etc/postfix/access_sender># Django : 2012-02-06
 +# Kapitel 5.2.7 access-Tabelle: Wer darf, wer darf nicht?
 +# Tabelle zum black- und whitelisten einzelner Absender auf Basis ihrer
 +# eMail-Adresse. Nach dem Ändern und/oder Erweitern der Tabelle, muß noch
 +# mittels:
 +#                  $ postmap /etc/postfix/access_sender
 +#
 +# die zugehörige Datenbank erzeugt werden.
 +#
 +sys4.de            reject_plaintext_session
 +</file>
 +
 +Anschließend erstellen wir die zugehörige db-Datei mit folgendem Aufruf.
 +   # postmap /etc/postfix/access_sender
 +
 +== 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 //**[[http://www.jetmore.org/john/code/swaks/|Swiss Army Knife for SMTP]]**// von [[http://www.jetmore.org/john/|John Jetmore]].
 +   # swaks --to django@nausch.org --from p@sys4.de --header-X-Test "Test-eMail" --server mx01.nausch.org --port 25 --tls --header "Subject: Test zur verpflichtenden TLS-Verschlüsselung auf Port 25".
 +
 +<code>=== Trying mx01.nausch.org:25...
 +=== 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:ECDHE-RSA-AES256-GCM-SHA384:256
 +=== TLS no local certificate set
 +=== TLS peer DN="/serialNumber=3S7x2lcbYiAccKZPoha0MSwP5hNsuSTP/OU=GT49447951/OU=See www.rapidssl.com/resources/cps (c)13/OU=Domain Control Validated - RapidSSL(R)/CN=*.nausch.org"
 + ~> EHLO p@sys4.de
 +<~  250-mx01.nausch.org
 +<~  250-PIPELINING
 +<~  250-SIZE 52428800
 +<~  250-ETRN
 +<~  250-ENHANCEDSTATUSCODES
 +<~  250 8BITMIME
 + ~> MAIL FROM:<p@sys4.de>
 +<~  250 2.1.0 Ok
 + ~> RCPT TO:<django@nausch.org>
 +<~  250 2.1.5 Ok
 + ~> DATA
 +<~  354 End data with <CR><LF>.<CR><LF>
 + ~> 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/john/code/swaks/
 + ~> 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.</code>
 +
 +Die Nachricht wurde also wie erwartet angenommen und zugestellt, den zugehörigen Eintrag dazu finden wir im Maillog unseres Servers.
 +   # less /var/log/maillog
 +<code>Oct  9 15:24:52 vml000087 postfix/smtpd[25034]: Anonymous TLS connection established from mail.sys4.de[194.126.158.132]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Oct  9 15:24:52 vml000087 postfix/smtpd[25034]: 80149C00093: client=mail.sys4.de[194.126.158.132]
 +Oct  9 15:24:52 vml000087 postfix/cleanup[26483]: 80149C00093: message-id=<>
 +Oct  9 15:24:53 vml000087 postfix/qmgr[4468]: 80149C00093: from=<p@sys4.de>, size=597, nrcpt=1 (queue active)
 +Oct  9 15:24:53 vml000087 postfix/smtpd[25034]: disconnect from mail.sys4.de[194.126.158.132]
 +Oct  9 15:24:53 vml000087 postfix/lmtp[23271]: 80149C00093: to=<django@nausch.org>, relay=10.0.0.77[10.0.0.77]:24, delay=1.2, delays=0.99/0/0.07/0.15, dsn=2.0.0, status=sent (250 2.0.0 <django@nausch.org> 7VEcCTe7F1Y4eQAArK2B9Q Saved)
 +Oct  9 15:24:53 vml000087 postfix/qmgr[4468]: 80149C00093: removed</code>
 +
 +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 "Test-eMail" --server mx01.nausch.org --port 25 --header "Subject: Test ohne verpflichtenden TLS-Verschlüsselung auf Port 25".
 +
 +<code>=== Trying mx01.nausch.org:25...
 +=== 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:<p@sys4.de>
 +<-  250 2.1.0 Ok
 + -> RCPT TO:<django@nausch.org>
 +<** 571 5.7.1 Session encryption is required. Contact your postmaster/admin for technical assistance. He can achieve our postmaster via email: postmaster@nausch.org or via fax: +49 8121 883179. In any case, please provide the following information in your problem report: This error message, time (Oct 12 10:33:16), client (194.126.158.132) and server (mx01.nausch.org).
 + -> QUIT
 +<-  221 2.0.0 Bye
 +=== Connection closed with remote host.</code>
 +
 +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.
 +
 +<code>Oct  9 13:26:48 vml000087 postfix/smtpd[1413]: connect from mail.sys4.de[194.126.158.132]
 +Oct  9 13:27:21 vml000087 postfix/smtpd[1413]: NOQUEUE: reject: RCPT from mail.sys4.de[194.126.158.132]: 450 4.7.1 Session encryption is required; from=<p@sys4.de> to=<django@nausch.org> proto=SMTP helo=<mail.sys4.de>
 +Oct  9 13:27:27 vml000087 postfix/smtpd[1413]: disconnect from mail.sys4.de[194.126.158.132]</code>
 +
 +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:mail_c7:mta_4#rueckmeldungen_beeinflussen_und_individualisieren|RÜCKMELDUNGEN BEEINFLUSSEN UND INDIVIDUALISIEREN]]** unserer //**/etc/postfix/main.cf**// an. Zum Aktivieren führen wir nun noch einen Reload unseres SMTP-Daemons durch.
 +   # 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 "Test-eMail" --server mx01.nausch.org --port 25 --header "Subject: Test ohne verpflichtenden TLS-Verschlüsselung auf Port 25".
 +
 +<code>=== Trying mx01.nausch.org:25...
 +=== 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:<p@sys4.de>
 +<-  250 2.1.0 Ok
 + -> RCPT TO:<django@nausch.org>
 +<** 571 5.7.1 Session encryption is required. Contact your postmaster/admin for technical assistance. He can achieve our postmaster via email: postmaster@nausch.org or via fax: +49 8121 883179. In any case, please provide the following information in your problem report: This error message, time (Oct 12 10:44:38), client (194.126.158.132) and server (mx01.nausch.org).
 + -> QUIT
 +<-  221 2.0.0 Bye
 +=== Connection closed with remote host.</code>
 +
 +Auch dieser Zustellversuch wird im Maillog vermerkt, dieses mal aber mit dem Fehlercode **571 5.7.1 Session encryption is required.**
 + 
 +<code>Oct  9 13:38:08 vml000087 postfix/smtpd[4495]: connect from mail.sys4.de[194.126.158.132]
 +Oct  9 13:38:27 vml000087 postfix/smtpd[4495]: NOQUEUE: reject: RCPT from mail.sys4.de[194.126.158.132]: 571 5.7.1 Session encryption is required; from=<p@sys4.de> to=<django@nausch.org> proto=SMTP helo=<mail.sys4.de>
 +Oct  9 13:38:30 vml000087 postfix/smtpd[4495]: disconnect from mail.sys4.de[194.126.158.132]</code>
 +==== 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 //**smtp_tls_policy_maps**// eine anderweitige Regelung getroffen.
 +  * **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**: Vorgeschriebene TLS-Verschlüsselung. Um ein Mindestmaß an Sicherheit garantieren zu können, kann mit der Option //**smtp_tls_mandatory_ciphers**// die mindestens zu unterstützenden Chiffren und mit der Option //**smtp_tls_mandatory_protocols**// die zu unterstützenden Protokolle definiert werden. Diese gelten dann für diese TLS-Sicherheitssufe und entsprechend höhere. Diese Option darf nicht für einen öffentlich erreichbaren und agierenden Mailserver verwendet werden.
 +  * **dane**: Opportunistisches DANE TLS. Bei dieser Sicherheitsstufe wird die TLS Policy des Ziels via [[http://de.wikipedia.org/wiki/Domain_Name_System_Security_Extensions|DNSSEC]] ermittelt. Hierzu ist es notwendig, dass die DNS-Zone der Zieldomäne digital signiert ist und der Host, auf dem der Postfix SMTP-Client läuft, die signierten DNS-Antorten überprüfen kann. Jede MX-Host-DNS-Zone sollte darüber hinaus auch signiert sein und sollte entsprechende DANE TLSA (RFC 6698) Records mit den Informationen zur Validierung des TLS Zertifikates zur Verfügung stellen. \\ Wird kein DNSSEC-validierter TLSA Datensatz ermittelt werden kann, wird als Fallback die Sicherheitsstufe **may** verwendet. Wurden zwar TLSA Records gefunden, diese aber nicht brauchbar sein sollten, wird die Sicherheitsstufe **encrypt** verwendet.
 +  * **dane-only**: Verpflichtenes DANE TLS, bei dem DANE TLSA Authentifizierung als zwingend vorgeschrieben ist. Bei dieser Sicherheitsoption gibt es __keinen__ Fallback zu "//may//" oder "//encrypt//" für den Fall dass TLSA Records fehlen, fehlerhaft als unbrauchbar sind!
 +  * **fingerprint**: Fingerabdrucküberprüfung der Zertifikate. Bei dieser Option gibt es weder eine Prüfung der Zertifikatskette, der Zertifikatsgültigkeit, von vertrauenswürdigen Zertifizierungsstellen oder anderem. Stattdessen wird der Fingerabruck des Zertifikates bzw. der öffentliche Schlüssel des Serverzertifikates überprüft. Der hierzu nötige Hash-Algorithmus wird abhängig von der Option //**smtp_tls_fingerprint_cert**// gebildet. 
 +  * **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 umd damit eine TLS Peername Überprüfung durchzuführen. Stattdessen wird der Standardname des Serverzertifikates, abhängig von der //**smtp_tls_secure_cert_match**// Option, geprüft, ob dieser mit dem (Sub-)Domain-Namen des Zielservers entspricht. 
 +
 +=== 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, setzt man den Parameter smtp_tls_security_level=may. Somit obliegt es dem SMTP-Client ob dieser mit einem STARTTLS die TLS-Verschlüsselung initiiert, oder nicht. Haben wir einen Mailserver, der auch Nachrichten an beliebige Mailserver im Internet senden soll, kann man dieses „best practices“ Verfahren wählen
 +
 +<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://www.postfix.org/postconf.5.html#smtp_tls_security_level
 +# default: smtp_tls_security_level = 
 +smtp_tls_security_level = may</code>
 +
 +=== verpflichtende Verschlüsselung zu allen Empfängern/Servern ===
 +Betreibt man ein Mailgateway in einer kundeneigenen Infrastruktur, bei dem alle Kommunikationspartner bekannt sind, wird man Nachrichten nur austauschen wollen, wenn eine entsprechend gesicherte Verbindung etabliert werden konnte. Hier können wir folgende **smtp_tls_security_level** Optionen nutzen:
 +  * **encrypt**: Vorgeschriebene TLS-Verschlüsselung. Um ein Mindestmaß an Sicherheit garantieren zu können, kann mit der Option smtp_tls_mandatory_ciphers die mindestens zu unterstützenden Chiffren und mit der Option smtp_tls_mandatory_protocols die zu unterstützenden Protokolle definiert werden. Diese gelten dann für diese TLS-Sicherheitssufe und entsprechend höhere. Diese Option darf nicht für einen öffentlich erreichbaren und agierenden Mailserver verwendet werden.
 +  * **dane-only**: Verpflichtenes DANE TLS, bei dem DANE TLSA Authentifizierung als zwingend vorgeschrieben ist. Bei dieser Sicherheitsoption gibt es keinen Fallback zu “may„ oder “encrypt„ für den Fall dass TLSA Records fehlen, fehlerhaft als unbrauchbar sind!
 +  * **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, abhängig von der smtp_tls_secure_cert_match Option, geprüft, ob dieser mit dem (Sub-)Domain-Namen des Zielservers entspricht.
 +
 +<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://www.postfix.org/postconf.5.html#smtp_tls_policy_maps|smtp_tls_policy_maps]]** können wir jedoch gezielt für einzelne Ziele feingranular festlegen, welche Kriterien für eine verpflichtende TLS-Verschlüsselung herangezogen werden sollen.
 +</WRAP>
 +
 +=== verpflichtende Verschlüsselung zu ausgewählten Empfängern/Servern ===
 +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, wenn eine TLS-Verschlüsselung überprüfbar zum zugehörigen Mailserver etabliert werden konnte. Als Kriterium ob wir nun wirklich mit dem Zielserver **mx1.tachtler.net** sprechen, werden wir dabei den **SHA1 Fingerprint** des Serverzertifikates von mx1.tachtler.net verwenden! 
 +openssl s_client -starttls smtp -connect mx1.tachtler.net:25 < /dev/null 2>/dev/null | openssl x509 -noout -fingerprint
 +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:25 < /dev/null 2>/dev/null | openssl x509 -noout -fingerprint
 +
 +   SHA1 Fingerprint=C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E
 +
 +<WRAP center round alert 80%>
 +Den erhaltenen Fingerprint //**C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E**// lassen wir uns nun vom Postmaster des Zielmailservers bestätigen. Hierzu wählen wir ein anderes Übertragungsmedium wie z.B. Telefon oder Faksimile. 
 +
 +Keinesfalls vermerken wir  **__ohne__** weitere Prüfung den Fingerprints in einer lokalen Konfigurationsdatei!
 +</WRAP>
 +
 +Den **__verifizierten Fingerprint__** hinterlegen wir nun in einer eigenen Konfigurationsdatei //**smtp_tls_policy_maps**// die wir anschliessend unserem Postfix-Mailserver bekannt geben.  
 +
 +Zunächst legen wir uns die benötigte Konfigurationsdatei an.
 +   # vim /etc/postfix/smtp_tls_policy_maps
 +
 +<file bash /etc/postfix/smtp_tls_policy_maps># Django : 2015-10-07 - Empfängerbasierte verpflichtende TLS-Verschlüsselung
 +#          Tabelle für die zielwegorientierte individuelle Vorgabe einer
 +#          verpflichtenden TLS-Transportverschlüsselung einzelner Zieldomains.
 +#          http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps
 +#
 +#          Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels:
 +#
 +#                    $ postmap /etc/postfix/smtp_tls_policy_maps
 +#
 +#          die zugehörige Datenbank erzeugt werden.
 +
 +# Zieldomain    smtp_tls_security_level    optionale Parameter
 +tachtler.net    fingerprint                match=C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E</file>
 +
 +Wie in der Konfigurationsdatei angegeben erstellen wir nun noch die benötigte Datenbank-Datei.
 +   # postmap /etc/postfix/smtp_tls_policy_maps
 +
 +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://de.wikipedia.org/wiki/Hashfunktion|Hash-Algorithmus]]** unserem Server noch vorgeben. Dies tragen wir in der Sektion **TLS/SSL-VERSCHLÜSSELUNG** unserer Postfixinstallation ein.
 +   # vim  /etc/postfix/main.cf  
 +
 +<code bash>################################################################################
 +## TLS/SSL-VERSCHLÜSSELUNG
 +#
 +
 +...
 +
 +# Django : 2015-10-07 - Hashfunktion für den Fingerprint der Zertifikate
 +#          Empfängt der SMTP-Client ein Serverzertifikat, kann er zur
 +#          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://www.postfix.org/postconf.5.html#smtp_tls_policy_maps
 +# default: smtp_tls_policy_maps =
 +smtp_tls_policy_maps = btree:/etc/postfix/smtp_tls_policy_maps
 +
 +...
 +
 +</code>
 +
 +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 //**/etc/postfix/smtp_tls_policy_maps**// vermerkt wurde.
 +
 +Zum Testen unserer Konfigurationsänderung tragen wir einfach kurz einen falschen Fingerprint der Zieldomain ein und beobachten unser maillog.
 +   # tailf /var/log/maillog
 +
 +<code>Oct 12 14:59:42 vml000087 postfix/submission/smtpd[17446]: connect from ppp-93-104-85-187.dynamic.mnet-online.de[93.104.85.187]                                                    
 +Oct 12 14:59:43 vml000087 postfix/submission/smtpd[17446]: Anonymous TLS connection established from ppp-93-104-85-187.dynamic.mnet-online.de[93.104.85.187]: TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)                                                                                                                                                 
 +Oct 12 14:59:43 vml000087 postfix/submission/smtpd[17446]: 9BE5BC00090: client=ppp-93-104-85-187.dynamic.mnet-online.de[93.104.85.187], sasl_method=PLAIN, sasl_username=django@nausch.org                                                                                                                                                                            
 +Oct 12 14:59:43 vml000087 postfix/cleanup[17451]: 9BE5BC00090: message-id=<561BAEBE.5070208@nausch.org>                                                                            
 +Oct 12 14:59:43 vml000087 postfix/qmgr[17413]: 9BE5BC00090: from=<michael@nausch.org>, size=865, nrcpt=1 (queue active)                                                            
 +Oct 12 14:59:44 vml000087 postfix/submission/smtpd[17446]: disconnect from ppp-93-104-85-187.dynamic.mnet-online.de[93.104.85.187]                                                 
 +Oct 12 14:59:44 vml000087 postfix/smtpd[18113]: connect from vml000067.dmz.nausch.org[10.0.0.67]                                                                                   
 +Oct 12 14:59:44 vml000087 postfix/smtpd[18113]: CC17DC00092: client=vml000067.dmz.nausch.org[10.0.0.67], orig_client=unknown[10.0.0.87]                                            
 +Oct 12 14:59:44 vml000087 postfix/cleanup[17649]: CC17DC00092: message-id=<561BAEBE.5070208@nausch.org>                                                                            
 +Oct 12 14:59:44 vml000087 postfix/qmgr[17413]: CC17DC00092: from=<michael@nausch.org>, size=2381, nrcpt=1 (queue active)                                                           
 +Oct 12 14:59:44 vml000087 postfix/smtp[20834]: 9BE5BC00090: to=<klaus@tachtler.net>, relay=10.0.0.67[10.0.0.67]:10024, delay=1.3, delays=0.3/0/0.01/1, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[10.0.0.87]:10025): 250 2.0.0 Ok: queued as CC17DC00092)                                                                                                       
 +Oct 12 14:59:44 vml000087 postfix/qmgr[17413]: 9BE5BC00090: removed                                                                                                                
 +
 +Oct 12 14:59:45 vml000087 postfix/smtp[20834]: Trusted TLS connection established to mx1.tachtler.net[88.217.171.167]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)                                                                                                                                                                              
 +Oct 12 14:59:45 vml000087 postfix/smtp[20834]: CC17DC00092: to=<klaus@tachtler.net>, relay=mx1.tachtler.net[88.217.171.167]:25, delay=0.77, delays=0.06/0.01/0.7/0, dsn=4.7.5, status=deferred (Server certificate not verified)
 +</code>
 +
 +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]:25**. 
 +
 +Wurde das Zertifikat ausgetauscht ohne dem versendenden Kommunikationspartner zu informieren, scheitert die  verschlüsselte und verifizierte Verbindung, da die Überprüfung des Fingerprints kein positives Ergebnis mehr bringen kann:
 +   Oct  1 19:02:56 vml000087 postfix/smtp[2818]: Trusted TLS connection established to mx1.tachtler.net[88.217.171.167]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +   Oct  1 19:02:56 vml000087 postfix/smtp[2818]: DEA87C0008A: to=<klaus@tachtler.net>, relay=mx1.tachtler.net[88.217.171.167]:25, delay=88445, delays=88437/0.04/8.5/0, dsn=4.7.5, status=deferred (Server certificate not verified)
 +
 +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 **//deffered//-Queue** eingestellt! Am besten überwacht man daher das **maillog** mit Hilfe einer gängigen Monitoring-Lösung wie **[[centos:web_c7:graylog2|graylog]]** oder **[[centos:web_c7:icinga:start|icinga 2]]**.
 +
 +<WRAP center round tip>
 +An Hand dieses Beispiels kann man also zielwegorientiert eine verpflichtende Verschlüsselung zur Übertragung definieren. In Verbindung mit der **[[centos:mail_c7:mta_5#verpflichtende_verschluesselung_nur_fuer_ausgewaehlte_clients|verpflichtenden Verschlüsselung beim SMTP-Dämon]]** des Empfängers, können wir so sicherstellen, dass sensible Daten nicht nur TLS-gesichert sondern auch mit dem verifizierten Ziel ausgetauscht werden!
 +
 +<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**.
 +</WRAP>
 +
 +</WRAP>
 +
 +
 +
 +
 +
 +=== "DANE" & TLS ===
 +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/TLSA-Überprüfung für alle Ziele optional, also opportunistisch, oder verpflichtend für alles bzw. einzelne Systeme gezielt gelten soll.
 +
 +Egal ob nun opportunistisch oder verpflichtend, müssen wir unserem Postfix-Client angeben, ob der DNSSEC-Anfragen stellen soll, oder nicht. Bei beiden Varianten setzen wir den Parameter **//smtp_dns_support_level//** in unserer //**/etc/postfix/main.cf**// in der Sektion **TLS/SSL-VERSCHLÜSSELUNG**.
 +   # vim /etc/postfix/main.cf
 +
 +<code bash>################################################################################
 +## TLS/SSL-VERSCHLÜSSELUNG
 +#
 +
 +... 
 +
 +# 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, DNS-Abfragen vornehmen oder dies unterlassen.
 +#          Folgende Werte können bei smtp_dns_support_level gesetzt werden:
 +#          - disabled : Es werden keinerlei DNS-Abfragen vom Client vorge-
 +#                       genommen. Der Client benutzt lediglich die konfigu-
 +#                       rierten IP-Adressen verwendet
 +#
 +#          - enabled  : Der Client führt DNS-Anfragen zur Ermittlung der
 +#                       zugehörigen IP-Adressen verwendet. Bei Namen, die
 +#                       nicht von []-Klöammern eingeschlossen sind, wird
 +#                       nicht der zugehörige A-Record angefragt, sondern
 +#                       der MX-Record
 +#
 +#          - dnssec   : Anfragen an den DNS-Resolver werden als dnssec-An-
 +#                       fragen gestellt und die Rückgabewerte entsprechend
 +#                       erwartet. Der Parameterwert dnssec ist nur bei
 +#                       gleichzeitiger TLS-Sicherheitsstoufe "dane" bzw.
 +#                       "dane-only" zu setzen. Für "normale" anfragen
 +#                       ergibt sich bei Verwendung des Parameters "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
 +
 +...
 +
 +</code>
 +
 +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** "nur" der Fingerprint des Serverzertifikats überprüft. Nachrichten an die Domäne sys4.de werden hingegen nur übertragen, wenn das Serverzertifikat dem des TLSA-Records entspricht.
 +   # vim /etc/postfix/smtp_tls_policy_maps
 +
 +<file bash /etc/postfix/smtp_tls_policy_maps># Django : 2015-10-07 - Empfängerbasierte verpflichtende TLS-Verschlüsselung
 +#          Tabelle für die zielwegorientierte individuelle Vorgabe einer
 +#          verpflichtenden TLS-Transportverschlüsselung einzelner Zieldomains.
 +#          http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps
 +#
 +#          Nach dem Ändern und/oder Erweitern der Tabelle, muß noch mittels:
 +#
 +#                    $ postmap /etc/postfix/smtp_tls_policy_maps
 +#
 +#          die zugehörige Datenbank erzeugt werden.
 +
 +# Zieldomain    smtp_tls_security_level    optionale Parameter
 +tachtler.net    fingerprint                match=C3:17:BB:DC:7F:E3:51:F6:3E:48:E7:4F:5A:48:48:6C:94:24:63:0E
 +sys4.de         dane-only
 +</file>
 +
 +Vor der Aktivierung einer Konfigurationsänderung musss noch die zugehörige db_Datei der lookup- Tabelle **smtp_tls_policy_maps**.
 +   # postmap /etc/postfix/smtp_tls_policy_maps
 +
 +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 = //dane-only//** definiert haben, wird der Zertifikats-Fingerprint via DNSSEC-Anfrage geholt und mit dem Wert verglichen, den der SMTP-Client vom empfangenen Server-Zertifikat ermitelt hat. Sind beide Fingerprints gleich, wird unser MTA mit der Üertragung der Nachricht(en) fortfahren. Im Maillog unseres Servers wird dies entsprehend positiv vermerkt.
 +
 +<code>Oct 13 09:53:36 vml000087 postfix/smtp[18312]: connect to mail.sys4.de[194.126.158.132]:25
 +Oct 13 09:53:36 vml000087 postfix/smtp[18312]: Verified TLS connection established to mail.sys4.de[194.126.158.132]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Oct 13 09:53:37 vml000087 postfix/smtp[18312]: 17D5FC00097: to=<p@sys4.de>, relay=mail.sys4.de[194.126.158.132]:25, delay=1.8, delays=0.05/0.02/0.71/1, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 3nZpz5107tz1G7x)
 +Oct 13 09:53:37 vml000087 postfix/qmgr[18157]: 17D5FC00097: removed
 +</code>
 +
 +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. 
 +
 +<code>Oct 13 12:32:22 mailslut1 postfix/smtp[27804]: Trusted TLS connection established to mx01.nausch.org[217.91.103.190]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Oct 13 12:32:22 mailslut1 postfix/smtp[27804]: 1945C180008B: to=<django@nausch.org>, relay=mx01.nausch.org[217.91.103.190]:25, delay=56, delays=55/0.04/1.2/0, dsn=4.7.5, status=deferred (Server certificate not verified)</code>
 +
 +
 +==== Perfect Forward Secrecy ====
 +Zur Aktivierung von **[[http://www.postfix.org/FORWARD_SECRECY_README.html|PFS]]**((**P**erfect **F**orward **S**ecrecy)) sind nachfolgende Optionen von entscheidender Bedeutung.
 +  - **Ephemeral-Diffie-Hellmann Schlüssel**: Unsere bereits generierten //[[centos:mail_c7:mta_5?&#enhanced_diffie_hellman_keys|Diffie Hellmann Schlüssel]]// binden wir nun in unserer Postfix-Konfigurationsdatei ein. \\ \\ <code bash># Django : 2014-10-19 -  EDH Server support
 +#          http://www.postfix.org/FORWARD_SECRECY_README.html
 +#          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 = /etc/pki/postfix/private/dh_4096.pem
 +smtpd_tls_dh512_param_file = /etc/pki/postfix/private/dh_512.pem</code>
 +  - **"Ephemeral Elliptic Curve Diffie-Hellman" Schlüsselaustausch**: Definition des Grads der Sicherheit beim EECDH Schlüsselaustausch \\ \\ <code bash># Django : 2014-10-19 - Grad der Sicherheit beim EECDH Schlüsselaustausch
 +#          Ephemeral Elliptic-Curve Diffie-Hellman (EECDH)
 +#          http://www.postfix.org/postconf.5.html#smtpd_tls_eecdh_grade
 +# default: smtpd_tls_eecdh_grade = strong
 +smtpd_tls_eecdh_grade = ultra</code>
 +  - **Präferierter standardisierter kryptographischer Algorithmus**: Statt der vom Client gewünschte Cipher, wird die Default Cipher Liste des Servers verwendet. \\ \\ <code bash># Django : 2014-10-19 - Default Cipher Liste des Servers verwenden, statt der
 +#          vom Client genannten Wunsch-Ciphers
 +#          http://www.postfix.org/postconf.5.html#tls_preempt_cipherlist
 +# default: tls_preempt_cipherlist = no
 +tls_preempt_cipherlist = yes</code>
 +
 +
 +
 +
 +
 +==== 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://www.postfix.org/postconf.5.html#smtpd_tls_received_header
 +# default: smtpd_tls_received_header = no
 +smtpd_tls_received_header = yes</code>
 +
 +=== 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 "nur" die Werte **0** und **1** gesetzt. Loglevel **2** und höher benötigt man nur zur Problembehandlung. Von der Benutzung des Loglefel **4** wird dringend abgeraten!
 +</WRAP>
 +<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://www.postfix.org/postconf.5.html#smtpd_tls_loglevel
 +# default: smtpd_tls_loglevel = 0
 +smtpd_tls_loglevel = 1</code>
 +
 +=== 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 "nur" die Werte **0** und **1** gesetzt. Loglevel **2** und höher benötigt man nur zur Problembehandlung. Von der Benutzung des Loglefel **4** wird dringend abgeraten!
 +</WRAP>
 +<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://www.postfix.org/postconf.5.html#smtp_tls_loglevel
 +# default: smtp_tls_loglevel = 0
 +smtp_tls_loglevel = 1</code>
 +
 +
 +===== Konfiguration aktivieren =====
 +Zum Aktivieren unserer SSL/TLS-Verschlüsselung starten wir nun unseren Postfix-Daemon einmal durch.
 +   # systemctl restart postfix.service
 +
 +===== Postfix Verbindungstests =====
 +==== erster Test ====
 +Als erstes kontrollieren wir, ob unser MX nun **//STARTTLS//** als ESMTP-Komando anbietet:
 +   # telnet ::1 25
 +<code>Trying ::1...                                                                                  
 +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.
 +</code>
 +
 +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:25
 +<code>CONNECTED(00000003)
 +depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
 +verify return:1
 +depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA
 +verify return:1
 +depth=0 serialNumber = 3S7x2lcbYiAccKZPoha0MSwP5hNsuSTP, OU = GT49447951, OU = See www.rapidssl.com/resources/cps (c)13, OU = Domain Control Validated - RapidSSL(R), CN = *.nausch.org
 +verify return:1
 +---
 +Certificate chain
 + 0 s:/serialNumber=3S7x2lcbYiAccKZPoha0MSwP5hNsuSTP/OU=GT49447951/OU=See www.rapidssl.com/resources/cps (c)13/OU=Domain Control Validated - RapidSSL(R)/CN=*.nausch.org
 +   i:/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
 + 1 s:/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
 +   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 + 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 +   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 +---
 +Server certificate
 +-----BEGIN CERTIFICATE-----
 +MIIFKjCCBBKgAwIBAgIDEdPpMA0GCSqGSIb3DQEBCwUAMDwxCzAJBgNVBAYTAlVT
 +MRcwFQYDVQQKEw5HZW9UcnVzdCwgSW5jLjEUMBIGA1UEAxMLUmFwaWRTU0wgQ0Ew
 +HhcNMTQwNDA4MDMyNTAyWhcNMTYwNjAyMDEzODU0WjCBuzEpMCcGA1UEBRMgM1M3
 +eDJsY2JZaUFjY0taUG9oYTBNU3dQNWhOc3VTVFAxEzARBgNVBAsTCkdUNDk0NDc5
 +NTExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29tL3Jlc291cmNlcy9jcHMg
 +KGMpMTMxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZhbGlkYXRlZCAtIFJhcGlk
 +U1NMKFIpMRUwEwYDVQQDDAwqLm5hdXNjaC5vcmcwggEiMA0GCSqGSIb3DQEBAQUA
 +A4IBDwAwggEKAoIBAQDRhxUen7499yElJr2cOIPdg4u/E93rgFw3DhflaV54r8G3
 +oA1U+brU7XNpnRVA+QHk1aXTnROwGX46mlxacKOQPE0U9dXMRFrWfnCcOCgUqkjY
 +vQdivwKUOJqfJfef0Zun4C7LabfP/Gb5TkFUC7+Hq3jzoZnifleRuK+2MZXX05/E
 ++T5jKrVsanfh2bN6WKgzwvmPaurpelA1f5ciiaWcuXtTc8Hrshyko30IeyIxAJ2J
 +aj3zHKEjuTMNn/fsMOOFO0LG2T68Wc9gFRa0ds1LXFbuwOxi1i/dLRWDFhGZtplp
 +HOBlYBkwnEawpsHS+nQVEc2d7CFCBWr2MCSQLQQvAgMBAAGjggGzMIIBrzAfBgNV
 +HSMEGDAWgBRraT1qGEJK3Y8CZTn9NSSGeJEWMDAOBgNVHQ8BAf8EBAMCBaAwHQYD
 +VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCMGA1UdEQQcMBqCDCoubmF1c2No
 +Lm9yZ4IKbmF1c2NoLm9yZzBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vcmFwaWRz
 +c2wtY3JsLmdlb3RydXN0LmNvbS9jcmxzL3JhcGlkc3NsLmNybDAdBgNVHQ4EFgQU
 +HjMj1hUDkcufmSmgDVeMt7sdoAkwDAYDVR0TAQH/BAIwADB4BggrBgEFBQcBAQRs
 +MGowLQYIKwYBBQUHMAGGIWh0dHA6Ly9yYXBpZHNzbC1vY3NwLmdlb3RydXN0LmNv
 +bTA5BggrBgEFBQcwAoYtaHR0cDovL3JhcGlkc3NsLWFpYS5nZW90cnVzdC5jb20v
 +cmFwaWRzc2wuY3J0MEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUF
 +BwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqG
 +SIb3DQEBCwUAA4IBAQACZLmO7zRHC4zEXyXCHpIgZ/TIo8sdvGzDH2koZgU0ZlCR
 +psebPpulKDr2Q6JYVPsS6z7sqw9SNCmVjeRngIgCpuih7DGUzrc7YzPw4vmGTgND
 +KTCQ8B3TqjYak3pG3LUUwsSIL1//oSuYKkdClmpNgFgYJegVdXrE3+EjuoLq5wwb
 +xsGzO1KW5olUX7J4IwZbnE5ZRrhF+UIRtj1yPx2fqXOBGuqGdhZ4pTrsY20e6mJJ
 +4ZOK0RY0MFy1JN3cWAsL5mR3wZwLeUYXnwSHKqWHE0TjJcy5X6sLZP5IoOt61vu1
 +7Zv1GcT4i3a/8uGGAGINouL3WmdqQ5Uj5qyhceli
 +-----END CERTIFICATE-----
 +subject=/serialNumber=3S7x2lcbYiAccKZPoha0MSwP5hNsuSTP/OU=GT49447951/OU=See www.rapidssl.com/resources/cps (c)13/OU=Domain Control Validated - RapidSSL(R)/CN=*.nausch.org
 +issuer=/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
 +---
 +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/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
 +Server public key is 2048 bit
 +Secure Renegotiation IS supported
 +Compression: NONE
 +Expansion: NONE
 +SSL-Session:
 +    Protocol  : TLSv1.2
 +    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
 +    Session-ID: 73C80E733671FD4E5012E569A1C6B8053DC7CCD7D5BAA7CB824A7608B14E0F87
 +    Session-ID-ctx: 
 +    Master-Key: 24BA85939899214B7F27361C9BE49B3BA8756F3FCBF6B504346CF4CD17445A26A0F91BF1495B35F632ECDEEAFD8A3F93
 +    Key-Arg   : None
 +    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.@#...Z.
 +    0010 - 86 06 3a 5c 57 99 91 70-6a df ec ba 04 65 43 a5   ..:\W..pj....eC.
 +    0020 - 45 03 af 61 3d 59 10 f8-eb 6a 94 aa 4c b7 50 82   E..a=Y...j..L.P.
 +    0030 - b6 ca a1 be 4f 10 fa 67-a5 90 fa f9 92 fe 3c 79   ....O..g......<y
 +    0040 - 57 bf 34 22 83 47 db f7-5c 8e fc 5b d5 25 f4 47   W.4".G..\..[.%.G
 +    0050 - 16 cf 5c 05 f9 0d 96 aa-92 9d 11 ff 68 dc 56 3b   ..\.........h.V;
 +    0060 - 8e 02 99 79 a1 ba 31 68-38 91 1e 4e 51 94 aa 64   ...y..1h8..NQ..d
 +    0070 - 0a 73 fd 0f b3 e2 74 ab-71 ed ad 2e 5d e8 ac 7c   .s....t.q...]..|
 +    0080 - 41 6e d1 2c 7a 28 30 98-b1 33 3b 34 55 34 b4 30   An.,z(0..3;4U4.0
 +    0090 - 23 30 69 4b ac 01 76 5d-5f c9 6a 42 14 0c 05 d8   #0iK..v]_.jB....
 +
 +    Start Time: 1414359330
 +    Timeout   : 300 (sec)
 +    Verify return code: 0 (ok)
 +---
 +250 DSN
 +quit
 +221 2.0.0 Bye
 +closed
 +</code>
 +
 +Im obigen Beispiel sehen wir, dass:
 +   * **Protokoll**: TLSv1.2
 +   * **Cipher**   : ECDHE-RSA-AES256-GCM-SHA384 
 +und als temporärer Server-Key **ECDH, secp384r1, 384 bits** verwendet wurden.
 +
 +Die Verbindung wurde uns im Maillog entsprechend positiv quittiert:
 +<code>Oct 26 22:35:30 vml000087 postfix/smtpd[22081]: connect from vml000087.dmz.nausch.org[10.0.0.87]
 +Oct 26 22:35:30 vml000087 postfix/smtpd[22081]: Anonymous TLS connection established from vml000087.dmz.nausch.org[10.0.0.87]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Oct 26 22:35:34 vml000087 postfix/smtpd[22081]: disconnect from vml000087.dmz.nausch.org[10.0.0.87]
 +</code>
 +
 +==== cipherscan ====
 +Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https://github.com/jvehent/cipherscan|cipherscan]]** von [[julien@linuxwall.info|Julien Vehent]] und [[hkario@redhat.com|Hubert Kario]] zurück. Das Projekt basiert auf den openssl-Bibliotheken und wird auf [[https://github.com|GitHub]] zur Verfügung gestellt.
 +
 +Mit nachfolgendem Aufruf kann überprüft werden, welche Ciphers angeboten werden.
 +   # /usr/local/src/cipherscan-master/cipherscan -o /usr/local/src/cipherscan-master/openssl --curves -starttls smtp mx1.nausch.org:587
 +
 +<code>.....................................
 +Target: imap.nausch.org:587
 +
 +prio  ciphersuite                  protocols              pfs                 curves
 +1     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +2     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +3     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +4     ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +5     ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +6     ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-256,256bits  prime256v1,secp384r1,secp521r1
 +7     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,4096bits         None
 +8     DHE-RSA-AES256-SHA256        TLSv1.2                DH,4096bits         None
 +9     DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +10    DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +11    DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,4096bits         None
 +12    DHE-RSA-AES128-SHA256        TLSv1.2                DH,4096bits         None
 +13    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +14    DHE-RSA-SEED-SHA             TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +15    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits         None
 +
 +Certificate: trusted, 4096 bit, sha512WithRSAEncryption signature
 +TLS ticket lifetime hint: 300
 +OCSP stapling: not supported
 +Cipher ordering: server
 +Curves ordering: server
 +Curves fallback: False
 +</code>
 +
 +Die Bewertung der einzelnen Chiffren müssen wir hier immer noch selbst vornehmen; hilfreiche Informationen hierzu findet man z.B. im Buch **//[[https://www.feistyduck.com/books/bulletproof-ssl-and-tls/|BULLETPROOF SSL AND TLS]]//** von **[[http://blog.ivanristic.com/|Ivan Ristić]]**. Wir können aber auch zur genauen Bewertung der TLS-Verwundbarkeit unseres SMTP-Servers auf das nachfolgend beschriebene Projekt **[[centos:mail_c7:mta_5#testssl|testssl]]** zurückgreifen.
 +
 +
 +==== testssl ====
 +Zum Überprüfen welche Chiffren vom Server angeboten und unterstützt werden, greifen wir auf das Tool **[[https://testssl.sh|testssl]]** von [[https://drwetter.eu/kontakt| Dr. Wetter]] zurück. Wir können damit, ähnlich wie bei [[https://www.ssllabs.com/ssltest/|SSL Server Test]] lokal unsere Server testen, nicht nur unsere Webserver, sondern auch unsere Mailserver!
 +
 +Das Shell-Script basiert auf den openssl-Bibliotheken und wird auf **[[https://github.com/drwetter/testssl.sh|testssl-Projektseite]]** zur Verfügung gestellt.
 +
 +Zum Testen unseres SMTP-Servers nutzen wir nachfolgenden Aufruf.
 +   # testssl.sh --starttls smtp 10.0.0.87:25
 +
 +Als Ergebnis erhalten wir eine ausführliche Aufstellung zum TLS-Gesundheitszustandes unseres Servers.
 +
 +<html><pre class="code">
 +<br><font style="color: rgb(180, 30, 179)">No mapping file found</font>
 +<font style="color: rgb(0, 0, 0)">
 +<b>###########################################################
 +    testssl.sh       2.6 from https://testssl.sh/          
 +    (</font><font style="color: rgb(104, 104, 104)">1.379c 2015/09/29 16:47:47</font><font style="color: rgb(0, 0, 0)">                          
 +
 +      This program is free software. Distribution and 
 +             modification under GPLv2 permitted.      
 +      USAGE w/o ANY WARRANTY. USE IT AT YOUR OWN RISK!
 +
 +       Please file bugs @ https://testssl.sh/bugs/
 +
 +###########################################################
 +</b>
 +Using "OpenSSL 1.0.2-chacha (1.0.2d-dev)" [~181 ciphers] on
 + vml000087.dmz.nausch.org:/root/bin/openssl.Linux.x86_64    
 + (built: "Jul  6 18:05:33 2015", platform: "linux-x86_64")  
 +
 +
 +<font style="background-color:black"><font style="color: rgb(255, 255, 255)">Testing now (2015-10-13 12:54) ---> 10.0.0.87:25 (10.0.0.87) <---</font></font>
 +
 + rDNS (10.0.0.87):       vml000087.dmz.nausch.org.
 + Service set:            STARTTLS via SMTP<br><br>        
 +<font style="color: rgb(84, 84, 255)"><b>--> Testing protocols </b></font><font style="color: rgb(0, 0, 0)">(via openssl, SSLv2 via sockets)
 +
 +<b> SSLv2      </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> SSLv3      </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> SSL 1      </b>not offered (OK)</font>
 +<font style="color: rgb(0, 0, 0)"><b> SSL 1.1    </b>not offered (OK)</font>
 +<font style="color: rgb(0, 0, 0)"><b> SSL 1.2    </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> SPDY/NPN   </b>(SPDY is a HTTP protocol and thus not tested here)</font>
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing ~standard cipher lists> Testing protocols <br></b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Null Ciphers                 </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Anonymous NULL Ciphers       </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Anonymous DH Ciphers         </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> 40 Bit encryption            </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> 56 Bit encryption            </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Export Ciphers (general)     </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Low (<=64 Bit)               </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> DES Cipherss                 </b></font><font style="color: rgb(132, 255, 122)"><b>not offered (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Medium grade encryption      </b></font><font style="color: rgb(178, 24, 24)">offered (NOT ok)</font>
 +<font style="color: rgb(0, 0, 0)"><b> Triple DES Ciphers           </b></font><font style="color: rgb(178, 105, 25)">offered (NOT ok)</font>
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing ~standard cipher lists> Testing protocols</b></font><font style="color: rgb(0, 0, 0)"> -- omitting 3DES, RC4 and Null Encryption here</font><br>
 +<font style="color: rgb(30, 180, 29)"> PFS is offered (OK)  </font><font style="color: rgb(0, 0, 0)">ECDHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA256 DHE-RSA-AES256-SHA DHE-RSA-CAMELLIA256-SHA ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 DHE-RSA-AES128-GCM-SHA256 DHE-RSAAES128-SHA256 DHE-RSA-AES128-SHA DHE-RSA-SEED-SHA DHE-RSA-CAMELLIA128-SHA ECDHE-RSA-AES128-SHA</font>
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing server preferences</b></font><br>
 +<font style="color: rgb(0, 0, 0)"><b> Has server cipher order?     </b></font><font style="color: rgb(132, 255, 122)"><b>yes (OK)</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Negotiated protocol?         </b></font><font style="color: rgb(132, 255, 122)"><b>TLSv1.2</b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Negotiated cipher order?     </b></font><font style="color: rgb(132, 255, 122)"><b>ECDHE-RSA-AES256-GCM-SHA384(OK)</b></font><font style="color: rgb(0, 0, 0)">, </font><font style="color: rgb(30, 180, 29)">384 bit ECDH</font>
 +<font style="color: rgb(0, 0, 0)"><b>  Cipher order                </b></font>
 +     TLSv1:     ECDHE-RSA-AES256-SHA DHE-RSA-AES256-SHA DHE-RSA-CAMELLIA256-SHA AES256-SHA CAMELLIA256-SHA ECDHE-RSA-AES128-SHA DHE-RSA-AES128-SHA ECDHE-RSA-DES-CBC3-SHA DHE-RSA-SEED-SHA DHE-RSA-CAMELLIA128-SHA EDH-RSA-DES-CBC3-SHA AES128-SHA SEED-SHA CAMELLIA128-SHA DES-CBC3-SHA IDEA-CBC-SHA                                                                 
 +     TLSv1.1:   ECDHE-RSA-AES256-SHA DHE-RSA-AES256-SHA DHE-RSA-CAMELLIA256-SHA AES256-SHA CAMELLIA256-SHA ECDHE-RSA-AES128-SHA DHE-RSA-AES128-SHA ECDHE-RSA-DES-CBC3-SHA DHE-RSA-SEED-SHA DHE-RSA-CAMELLIA128-SHA EDH-RSA-DES-CBC3-SHA AES128-SHA SEED-SHA CAMELLIA128-SHA DES-CBC3-SHA IDEA-CBC-SHA                                                                 
 +     TLSv1.2:   ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA256 DHE-RSA-AES256-SHA DHE-RSA-CAMELLIA256-SHA AES256-GCM-SHA384 AES256-SHA256 AES256-SHA CAMELLIA256-SHA ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES128-SHA256 DHE-RSA-AES128-SHA ECDHE-RSA-DES-CBC3-SHA DHE-RSA-SEED-SHA DHE-RSA-CAMELLIA128-SHA EDH-RSA-DES-CBC3-SHA AES128-GCM-SHA256 AES128-SHA256 AES128-SHA SEED-SHA CAMELLIA128-SHA DES-CBC3-SHA IDEA-CBC-SHA                                                                                                                                                               
 +     SPDY/NPN: (SPDY is a HTTP protocol and thus not tested here)
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing server defaults (Server Hello)</b></font><br>
 +<font style="color: rgb(0, 0, 0)"><b> TLS server extensions        </b>renegotiation info, EC point formats, session ticket, heartbeat</font>
 +<font style="color: rgb(0, 0, 0)"><b> Session Tickets RFC 5077     </b>7200 seconds</font>
 +<font style="color: rgb(0, 0, 0)"><b> Server key size              </b>2048 bit</font>
 +<font style="color: rgb(0, 0, 0)"><b> Signature Algorithm          </b></font><font style="color: rgb(30, 180, 29)">SHA256 with RSA</font>
 +<font style="color: rgb(0, 0, 0)"><b> Fingerprint / Serial         </b>SHA1 F6A2584CCA1F526869FF8773CF62408087AC21B2 / 11D3E9         
 +                              SHA256 AE3368DBD3199A34402C46636F4207EBC3235D84398C9F5C598AF737D1F4E690</font>
 +<font style="color: rgb(0, 0, 0)"><b> Common Name (CN)             </b><u>*.nausch.org</u> (wildcard certificate match)</font>
 +<font style="color: rgb(0, 0, 0)"><b> subjectAltName (SAN)         </b><u>*.nausch.org</u> <u>nausch.org</u></font>
 +<font style="color: rgb(0, 0, 0)"><b> Issuer                       </b><u>RapidSSL CA</u> <u>(GeoTrust, Inc.</u> from <u>US</u>)</font>
 +<font style="color: rgb(0, 0, 0)"><b> EV cert </b>(experimental)       no</font>
 +<font style="color: rgb(0, 0, 0)"><b> Certificate Expiration       </b></font><font style="color: rgb(30, 180, 29)">>= 60 days </font><font style="color: rgb(0, 0, 0)">(2014-04-08 05:25 --> 2016-06-02 03:38 +0200)</font>
 +<font style="color: rgb(0, 0, 0)"><b> # of certificates provided   </b>4</font>
 +<font style="color: rgb(0, 0, 0)"><b> Certificate Revocation List  </b>http://rapidssl-crl.geotrust.com/crls/rapidssl.crl</font>
 +<font style="color: rgb(0, 0, 0)"><b> OCSP URI                     </b>http://rapidssl-ocsp.geotrust.com</font>
 +<font style="color: rgb(0, 0, 0)"><b> OCSP stapling                </b>not offered</font>
 +<font style="color: rgb(0, 0, 0)"><b> TLS clock skew               </b>0 sec from localtime</font><br><br>
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing vulnerabilities</b></font><br>
 +<font style="color: rgb(0, 0, 0)"><b> Heartbleed </b>(CVE-2014-0160)               </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font><font style="color: rgb(0, 0, 0)">(timed out)</font>
 +<font style="color: rgb(0, 0, 0)"><b> CCS </b>(CVE-2014-0224)                      </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Secure Renegotiation </b>(CVE-2009-3555)     </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font>
 +<font style="color: rgb(0, 0, 0)"><b> Secure Client-Initiated Renegotiation    </b></font><font style="color: rgb(178, 24, 24)">VULNERABLE (NOT ok)</font><font style="color: rgb(0, 0, 0)">, DoS threat</font>
 +<font style="color: rgb(0, 0, 0)"><b> CRIME, TLS </b>(CVE-2012-4929)               </font><font style="color: rgb(30, 180, 29)">not vulnerable (OK) </font><font style="color: rgb(0, 0, 0)">(not using HTTP anyway)</font>
 +<font style="color: rgb(0, 0, 0)"><b> POODLE, SSL </b>(CVE-2014-3566)              </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font>
 +<font style="color: rgb(0, 0, 0)"><b> TLS_FALLBACK_SCSV </b>(RFC 7507), experim.   </font><font style="color: rgb(30, 180, 29)">Downgrade attack prevention supported (OK)</font>
 +<font style="color: rgb(0, 0, 0)"><b> FREAK </b>(CVE-2015-0204)                    </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font>
 +29)">Downgrade attack prevention supported (OK)</font>
 +<font style="color: rgb(0, 0, 0)"><b> LOGJAM </b>(CVE-2015-4000), experimental     </font><font style="color: rgb(132, 255, 122)"><b>not vulnerable (OK) </b></font><font style="color: rgb(0, 0, 0)">, common primes not checked. See below for any DH ciphers + bit size</font>
 +<font style="color: rgb(0, 0, 0)"><b> BEAST </b>(CVE-2011-3389)                    TLS1: </font><font style="color: rgb(178, 105, 25)">IDEA-CBC-SHA ECDHE-RSA-DES-CBC3-SHA
 +                                                EDH-RSA-DES-CBC3-SHA DES-CBC3-SHA</font>
 +<font style="color: rgb(0, 0, 0)">                                          -- but also supports higher protocols (possible mitigation): TLSv1.1 TLSv1.2</font>
 +<font style="color: rgb(0, 0, 0)"><b> RC4 </b>(CVE-2013-2566, CVE-2015-2808       </font><font style="color: rgb(30, 180, 29)">no RC4 ciphers detected (OK)</font><br>
 +<font style="color: rgb(84, 84, 255)"><b><br>--> Testing all locally available 181 ciphers against the server</b></font><font style="color: rgb(0, 0, 0)">, ordered by encryption strength<br>
 +
 +Hexcode  Cipher Suite Name (OpenSSL)    KeyExch.   Encryption Bits
 +-------------------------------------------------------------------------
 +<font style="color: rgb(0, 0, 0)"> xc030   ECDHE-RSA-AES256-GCM-SHA384    ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AESGCM     256</font>
 +
 +<font style="color: rgb(0, 0, 0)">  xc028   ECDHE-RSA-AES256-SHA384        ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  xc014   ECDHE-RSA-AES256-SHA           ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  x9f     DHE-RSA-AES256-GCM-SHA384      DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AESGCM     256</font>
 +<font style="color: rgb(0, 0, 0)">  x6b     DHE-RSA-AES256-SHA256          DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  x39     DHE-RSA-AES256-SHA             DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  x88     DHE-RSA-CAMELLIA256-SHA        DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    Camellia   256</font>
 +<font style="color: rgb(0, 0, 0)">  x9d     AES256-GCM-SHA384              RSA        AESGCM     256</font>
 +<font style="color: rgb(0, 0, 0)">  x3d     AES256-SHA256                  RSA        AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  x35     AES256-SHA                     RSA        AES        256</font>
 +<font style="color: rgb(0, 0, 0)">  x84     CAMELLIA256-SHA                RSA        Camellia   256</font>
 +<font style="color: rgb(0, 0, 0)">  xc02f   ECDHE-RSA-AES128-GCM-SHA256    ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AESGCM     128</font>
 +<font style="color: rgb(0, 0, 0)">  xc027   ECDHE-RSA-AES128-SHA256        ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  xc013   ECDHE-RSA-AES128-SHA           ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  x9e     DHE-RSA-AES128-GCM-SHA256      DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AESGCM     128</font>
 +<font style="color: rgb(0, 0, 0)">  x67     DHE-RSA-AES128-SHA256          DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  x33     DHE-RSA-AES128-SHA             DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  x9a     DHE-RSA-SEED-SHA               DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    SEED       128</font>
 +<font style="color: rgb(0, 0, 0)">  x45     DHE-RSA-CAMELLIA128-SHA        DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    Camellia   128</font>
 +<font style="color: rgb(0, 0, 0)">  x9c     AES128-GCM-SHA256              RSA        AESGCM     128</font>
 +<font style="color: rgb(0, 0, 0)">  x3c     AES128-SHA256                  RSA        AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  x2f     AES128-SHA                     RSA        AES        128</font>
 +<font style="color: rgb(0, 0, 0)">  x96     SEED-SHA                       RSA        SEED       128</font>
 +<font style="color: rgb(0, 0, 0)">  x41     CAMELLIA128-SHA                RSA        Camellia   128</font>
 +<font style="color: rgb(0, 0, 0)">  x07     IDEA-CBC-SHA                   RSA        IDEA       128</font>
 +<font style="color: rgb(0, 0, 0)">  xc012   ECDHE-RSA-DES-CBC3-SHA         ECDH </font><font style="color: rgb(30, 180, 29)">384</font><font style="color: rgb(0, 0, 0)">   3DES       168</font>
 +<font style="color: rgb(0, 0, 0)">  x16     EDH-RSA-DES-CBC3-SHA           DH </font><font style="color: rgb(30, 180, 29)">2048</font><font style="color: rgb(0, 0, 0)">    3DES       168</font>
 +<font style="color: rgb(0, 0, 0)">  x0a     DES-CBC3-SHA                   RSA        3DES       168</font>
 +
 +
 +<font style="background-color:black"><font style="color: rgb(255, 255, 255)">Done now (2015-10-13 12:55) ---> 10.0.0.87:25 (10.0.0.87) <---</font></font>
 +
 +</pre></html>
 +
 +==== 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://de.ssl-tools.net/mailservers/ überprüfen. Über den Link Mailzustellung testen kann man auch noch die Mailzustellung testen. Als Ergebnis erhält man eine aussagekräftige Aufstellung der Ergebnisse, so z.B. für den Mailserver von nausch.org: https://de.ssl-tools.net/mailservers/nausch.org
 +
 +{{ :centos:mail_c7:sssl-tools-ergebnis.png?800 |Bild: Ergebnis des scans bei https://de.ssl-tools.net/mailservers/}}
 +
 +
 + 
 +
 +==== eMail-Verkehr ====
 +Der verschlüsselte Transportweg wird in der Headerzeilen einer eMail entsprechend vermerkt:
 +<code>Received: from mx1.tachtler.net (mx1.tachtler.net [88.217.171.167]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested)
 +    by mx1.nausch.org (Postfix) with ESMTP for <michael@nausch.org>; Thu, 26 Mar 2009 09:30:36 +0100 (CET)</code>
 +Auch im **Maillog** wird die gesicherte Kommunikation protokolliert:
 +<code>Mar 26 23:40:40 nss postfix/smtp[18519]: setting up TLS connection to mx1.tachtler.net
 +Mar 26 23:40:40 nss postfix/smtp[18519]: TLS connection established to mx1.tachtler.net: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Mar 26 23:40:52 nss postfix/smtp[18519]: ECC0E1158526: to=<root@tachtler.net>, relay=mx1.tachtler.net[88.217.171.167]:25, delay=13, delays=0.01/0.14/0.81/12, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as D7C7141582)</code>
 +
 +==== 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' /var/log/maillog | sed -e 's/^.*\]\: //' -e 's/ with cipher.*//' | sort | uniq -c
 +
 +<code>  42184 TLSv1
 + 167813 TLSv1.2</code>
 +
 +=== ausgehender TLS-Verkehr ===
 +   # grep 'TLS connection established to' /var/log/maillog | sed -e 's/^.*\]:25\: //' -e 's/ with cipher.*//' | sort | uniq -c
 +
 +<code>  69741 TLSv1
 +   3323 TLSv1.1
 + 396939 TLSv1.2</code>
 +
 +=== graphische Übersicht des TLS-Clientverkehrs ===
 +Eine fortlaufende Übersicht der ausgehenden Verbindungen kann man sich mit Hilfe von **[[centos:mail_c7:mta_13#mailgraph_nextgeneration|Mailgraph]]** erstellen lassen. Nachfolgende Graphik zeigt exemplarisch die Verkehrsstatistik des hier benutzten Mailservers.
 +
 +{{ :centos:mail_c7:mailgraph-ng-dane.png?direct&800 |BILD: Ausgabegraphik von Mailgraph-NG zu den verschlüsselten abgehenden Verbindungen}}
 +====== Links ======
 +  * **⇐ [[centos:mail_c7:mta_4|Zurück zum Kapitel "Konfiguration unseres MTAs Postfix 2.11 unter CentOS7"]]**
 +  * **⇒ [[centos:mail_c7:mta_6|Weiter zum Kapitel "Anbindung unseres MTAs Postfix 2.11 an einem Backend-Mailserver (Dovecot-IMAP-Server) unter CentOS7"]]**
 +  * **[[centos:mail_c7:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 7<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +