Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:mail_c6:mta_5 [19.12.2013 21:31. ] – [erster Test] djangocentos:mail_c6:mta_5 [22.07.2019 15:08. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== SSL/TLS - Postfixverbindungen verschlüsselte Kommunikation ======
 +{{: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 großer 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 **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 verweden. 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, daß der Schlüssel selbst gar nicht ausgetauscht werden muß, 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.0.1e-16.el6_5
 +
 +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                      Relocations: (not relocatable)
 +Version     : 1.0.1e                            Vendor: CentOS
 +Release     : 16.el6_5                      Build Date: Tue 03 Dec 2013 09:22:10 PM CET
 +Install Date: Wed 04 Dec 2013 01:06:18 PM CET      Build Host: c6b10.bsys.dev.centos.org
 +Group       : System Environment/Libraries   Source RPM: openssl-1.0.1e-16.el6_5.src.rpm
 +Size        : 4201414                          License: OpenSSL
 +Signature   : RSA/SHA1, Tue 03 Dec 2013 11:53:57 PM CET, Key ID 0946fca2c105b9de
 +Packager    : CentOS BuildSystem <http://bugs.centos.org>
 +URL         : http://www.openssl.org/
 +Summary     : A 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
 +/etc/pki/tls/certs
 +/etc/pki/tls/certs/Makefile
 +/etc/pki/tls/certs/make-dummy-cert
 +/etc/pki/tls/certs/renew-dummy-cert
 +/etc/pki/tls/misc
 +/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
 +/etc/pki/tls/openssl.cnf
 +/etc/pki/tls/private
 +/usr/bin/openssl
 +/usr/lib64/.libcrypto.so.1.0.1e.hmac
 +/usr/lib64/.libcrypto.so.10.hmac
 +/usr/lib64/.libssl.so.1.0.1e.hmac
 +/usr/lib64/.libssl.so.10.hmac
 +/usr/lib64/libcrypto.so.1.0.1e
 +/usr/lib64/libcrypto.so.10
 +/usr/lib64/libssl.so.1.0.1e
 +/usr/lib64/libssl.so.10
 +/usr/lib64/openssl
 +/usr/lib64/openssl/engines
 +/usr/lib64/openssl/engines/lib4758cca.so
 +/usr/lib64/openssl/engines/libaep.so
 +/usr/lib64/openssl/engines/libatalla.so
 +/usr/lib64/openssl/engines/libcapi.so
 +/usr/lib64/openssl/engines/libchil.so
 +/usr/lib64/openssl/engines/libcswift.so
 +/usr/lib64/openssl/engines/libgmp.so
 +/usr/lib64/openssl/engines/libnuron.so
 +/usr/lib64/openssl/engines/libpadlock.so
 +/usr/lib64/openssl/engines/libsureware.so
 +/usr/lib64/openssl/engines/libubsec.so
 +/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)) 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-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
 +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-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
 +DES-CBC3-SHA                  SSLv3   Kx=RSA        Au=RSA   Enc=3DES(168)     Mac=SHA1
 +PSK-3DES-EDE-CBC-SHA          SSLv3   Kx=PSK        Au=PSK   Enc=3DES(168)     Mac=SHA1
 +KRB5-DES-CBC3-SHA             SSLv3   Kx=KRB5       Au=KRB5  Enc=3DES(168)     Mac=SHA1
 +KRB5-DES-CBC3-MD5             SSLv3   Kx=KRB5       Au=KRB5  Enc=3DES(168)     Mac=MD5 
 +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
 +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
 +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
 +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
 +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
 +KRB5-IDEA-CBC-SHA             SSLv3   Kx=KRB5       Au=KRB5  Enc=IDEA(128)     Mac=SHA1
 +KRB5-IDEA-CBC-MD5             SSLv3   Kx=KRB5       Au=KRB5  Enc=IDEA(128)     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 
 +EDH-RSA-DES-CBC-SHA           SSLv3   Kx=DH         Au=RSA   Enc=DES(56)       Mac=SHA1
 +EDH-DSS-DES-CBC-SHA           SSLv3   Kx=DH         Au=DSS   Enc=DES(56)       Mac=SHA1
 +DES-CBC-SHA                   SSLv3   Kx=RSA        Au=RSA   Enc=DES(56)       Mac=SHA1
 +KRB5-DES-CBC-SHA              SSLv3   Kx=KRB5       Au=KRB5  Enc=DES(56)       Mac=SHA1
 +KRB5-DES-CBC-MD5              SSLv3   Kx=KRB5       Au=KRB5  Enc=DES(56)       Mac=MD5 
 +EXP-EDH-RSA-DES-CBC-SHA       SSLv3   Kx=DH(512)    Au=RSA   Enc=DES(40)       Mac=SHA1 export
 +EXP-EDH-DSS-DES-CBC-SHA       SSLv3   Kx=DH(512)    Au=DSS   Enc=DES(40)       Mac=SHA1 export
 +EXP-DES-CBC-SHA               SSLv3   Kx=RSA(512)   Au=RSA   Enc=DES(40)       Mac=SHA1 export
 +EXP-RC2-CBC-MD5               SSLv3   Kx=RSA(512)   Au=RSA   Enc=RC2(40)       Mac=MD5  export
 +EXP-KRB5-RC2-CBC-SHA          SSLv3   Kx=KRB5       Au=KRB5  Enc=RC2(40)       Mac=SHA1 export
 +EXP-KRB5-DES-CBC-SHA          SSLv3   Kx=KRB5       Au=KRB5  Enc=DES(40)       Mac=SHA1 export
 +EXP-KRB5-RC2-CBC-MD5          SSLv3   Kx=KRB5       Au=KRB5  Enc=RC2(40)       Mac=MD5  export
 +EXP-KRB5-DES-CBC-MD5          SSLv3   Kx=KRB5       Au=KRB5  Enc=DES(40)       Mac=MD5  export
 +EXP-RC4-MD5                   SSLv3   Kx=RSA(512)   Au=RSA   Enc=RC4(40)       Mac=MD5  export
 +EXP-KRB5-RC4-SHA              SSLv3   Kx=KRB5       Au=KRB5  Enc=RC4(40)       Mac=SHA1 export
 +EXP-KRB5-RC4-MD5              SSLv3   Kx=KRB5       Au=KRB5  Enc=RC4(40)       Mac=MD5  export
 +</code>
 +Wir haben also mit der aktuellen Version von OpenSSL, den für //**Perfect Forward Secrecy**// benötigten kryptographischen Algorithmus **DH**((**D**iffie **H**ellmann)) sowie den weiterentwickelten **ECDH**((**E**lliptic **C**urve **D**iffie **H**ellmann)).
 +
 +Bei der [[centos:mail_c6:mta_1|Postfix-Installation]] werden zwei vordefinierte Schlüssel mitgeliefert, die jedoch bei den Installation mit diesem Paket gleich sind. Also werden wir uns nun erst eimal zwei Diffie-Hellmann-Schlüssel, einen 1024-bit (non-export ciphers) sowie einen 512-bit (export ciphers), erzeugen.
 +
 +   # openssl dhparam -out /etc/postfix/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/postfix/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>
 +
 +
 +===== Zertifikatserstellung =====
 +Für die Verschlüsselung unserer Kommunikation nutzen wir ein selbstsigniertes Zertifikat. Hierzu benötigen wir:
 +  - unseren //Private Key//, den wir hüten wie unseren Augapfel
 +  - unseren //Public Key//, den wir von einer CA((Certification Authority)) signieren, in unserem Falle unsere eigene CA, und
 +  - den //Public Key// der unterschreibenden CA, um deren Unterschrift zu prüfen.
 +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
 +<code 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
 +</code>
 +==== 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 20
 +drwxr-xr-x. 2 root root 4096 May 29 19:20 certs
 +drwxr-xr-x. 2 root root 4096 May 29 19:20 crl
 +-rw-r--r--  1 root root    0 Jun  5 00:20 index.txt
 +drwxr-xr-x. 2 root root 4096 May 29 19:20 newcerts
 +drwx------. 2 root root 4096 May 29 19:20 private
 +-rw-r--r--  1 root root    3 Jun  5 00:19 serial
 +</code>
 +==== Erstellen unserer eigenen CA ====
 +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}}
 +
 +   # openssl req -new -x509 -newkey rsa:2048 -keyout cakey.pem -out cacert.pem -days 9125
 +<code>Generating a 2048 bit RSA private key
 +..............+++
 +..................................................+++
 +writing new private key to 'cakey.pem'
 +Enter PEM pass phrase: des-woas-blos-I-und-sundst-koana
 +Verifying - Enter PEM pass phrase: des-woas-blos-I-und-sundst-koana
 +-----
 +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) [GB]:DE
 +State or Province Name (full name) [Berkshire]:Bayern
 +Locality Name (eg, city) [Newbury]:Pliening
 +Organization Name (eg, company) [My Company Ltd]:Nausch
 +Organizational Unit Name (eg, section) []:Zertifizierungsstelle
 +Common Name (eg, your name or your server's hostname) []:nausch.org
 +Email Address []:ca-support@nausch.org</code>
 +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 1716 26. Mär 21:37 cacert.pem
 +   -rw-r--r-- 1 root root 1751 26. Mär 21:37 cakey.pem
 +Vorsichtshalber ä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: (2048 bit)
 +modulus:
 +    00:d9:6d:c1:4f:c3:e4:e6:f4:14:64:60:57:ae:76:
 +    68:40:ab:77:20:18:ae:fa:7c:ec:0c:1e:74:7f:ac:
 +    a3:2b:74:8c:10:59:0c:63:03:46:04:a1:08:70:0c:
 +    a1:04:62:10:2d:23:67:08:3f:f0:ec:36:eb:67:c4:
 +    24:81:97:38:bc:e9:1f:80:51:61:19:e4:56:22:07:
 +    54:88:6e:14:f8:d8:c2:67:c7:e9:96:e8:9d:11:f7:
 +    68:40:ab:77:20:18:ae:fa:7c:ec:0c:1e:74:7f:ac:
 +    58:84:b3:86:cb:4a:fe:52:20:fa:49:b9:3b:8c:07:
 +    25:22:9e:9b:2e:ee:7f:72:95:d1:3a:af:f5:9c:8e:
 +    24:81:97:38:bc:e9:1f:80:51:61:19:e4:56:22:07:
 +    54:88:6e:14:f8:d8:c2:67:c7:e9:96:e8:9d:11:f7:
 + ...</code>
 +Will man die Passphrase eines Schlüssels entfernen, geht man wie folgt vor:
 +   # openssl rsa <cakey.pem >cakey_ohne_passphrase.pem
 +
 +   Enter pass phrase: des-woas-blos-I-und-sundst-koana
 +   writing RSA key
 +==== 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 2048 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:
 +   # openssl genrsa -out serverkey.pem -aes256 2048 -days 7300
 +<code>Generating RSA private key, 2048 bit long modulus
 +......+++
 +......................................+++
 +e is 65537 (0x10001)
 +Enter pass phrase for serverkey.pem: 12qwasyx
 +Verifying - Enter pass phrase for serverkey.pem: 12qwasyx</code>
 +
 +Wie schon erwähnt entfernen wir die Passphrase nun wieder, damit unser Postfix-Server, den Schlüssel ohne manuellen Eingriff laden und öffnen können muß! Schließlich wollen wir ja beim Systemstart nicht immer manuell die Passphrase eingeben müssen.
 +   # openssl rsa <serverkey.pem >serverkey_2.pem
 +Wie schon zuvor schützen wir auch hier den Serverschlüssel über die Dateirechte, nachdem wir diesen umbenannt haben.
 +   # mv serverkey_2.pem serverkey.pem
 +   # chmod 400 serverkey.pem
 +==== Certificate Signing Request erzeugen ====
 +Im folgenden Schritt zu unserem eigenen Zertifikat erzeugen wir einen **CSR**((Certificate Signing Request)), den wir dann in einem weiteren Schritt von unserer eigenen CA signieren lassen werden. <WRAP round alert> **__Wichtig__**: Bei unserem Serverzertifikat ist der **Common Name** von entscheidender Bedeutung. Hier muss der DNS-Name unseres Postfix-Server eingetragen werden, unter dem der Mailserver angesprochen wird!</WRAP>
 +   # openssl req -new -key serverkey.pem -out csr.pem -nodes
 +<code>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) [GB]:DE
 +State or Province Name (full name) [Berkshire]:Bayern
 +Locality Name (eg, city) [Newbury]:Pliening
 +Organization Name (eg, company) [My Company Ltd]:Nausch
 +Organizational Unit Name (eg, section) []:Postoffice
 +Common Name (eg, your name or your server's hostname) []:mx1.nausch.org
 +Email Address []:postmaster@nausch.org
 +
 +Please enter the following 'extra' attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:
 +</code>
 +==== Serverzertifikat signieren ====
 +Bevor wir nun unser eigenes Zertifikat signieren können, passen wir in der OpenSSL-Konfigurationsdatei die Laufzeit an, da wir diese nicht auf der Komandozeile übergeben können.
 +   # vim /etc/pki/tls/openssl.cnf
 +<code bash>
 +...
 +####################################################################
 +[ 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
 +
 +default_days    = 7300                  # how long to certify for
 +default_crl_days= 30                    # how long before next CRL
 +default_md      = sha1                  # which md to use.
 +preserve        = no                    # keep passed DN ordering
 +
 +...</code>
 +Außerdem verschieben wir den privaten Schlüssel unserer CA nach **/etc/pki/CA/private/**.
 +   # mv /etc/pki/CA/cakey.pem /etc/pki/CA/private/
 +Kommen wir zum krönenden Abschluss - wir signieren nun das Server-Zertifikat durch unsere CA: 
 +   # openssl ca -in csr.pem -notext -out servercert.pem
 +<code>Using configuration from /etc/pki/tls/openssl.cnf
 +Enter pass phrase for /etc/pki/CA/private/cakey.pem:
 +Check that the request matches the signature
 +Signature ok
 +Certificate Details:
 +        Serial Number: 0 (0x0)
 +        Validity
 +            Not Before: Mar 26 21:59:14 2009 GMT
 +            Not After : Mar 21 21:59:14 2029 GMT
 +        Subject:
 +            countryName               = DE
 +            stateOrProvinceName       = Bayern
 +            organizationName          = Nausch
 +            organizationalUnitName    = Postoffice
 +            commonName                = mx1.nausch.org
 +            emailAddress              = postmaster@nausch.org
 +        X509v3 extensions:
 +            X509v3 Basic Constraints: 
 +                CA:FALSE
 +            Netscape Comment: 
 +                OpenSSL Generated Certificate
 +            X509v3 Subject Key Identifier: 
 +                E7:13::9F:D0:C2:62:39:AE:B6:A1:73:70:95:D0:C2:62:CB:AD:46:15:BA:00
 +            X509v3 Authority Key Identifier: 
 +                keyid:7D:3E:16:7D:D7:76:73:11:F4:74:34:EF:82:62:E8:75:75:0F:98:83
 +
 +Certificate is to be certified until Mar 21 21:59:14 2029 GMT (7300 days)
 +Sign the certificate? [y/n]:y
 +
 +
 +1 out of 1 certificate requests certified, commit? [y/n]y
 +Write out database with 1 new entries
 +Data Base Updated
 +</code>
 +==== Schlüsseldateien ablegen ====
 +Für unsere Postfix-Installation legen wir uns am besten einen eigenen Unterordner unter **/etc/pki** an.
 +   # mkdir /etc/pki/postfix
 +Anschließend legen wir dort die drei benötigten Dateien ab:
 +  - unseren //Serverzertifikat// : **servercert.pem**
 +  - unseren //Serverschlüssel// : **serverkey.pem** und
 +  - das //CA-Zertifikat// : **cacert.pem**
 +und schützen diese Dateien mit den Dateirechten **400**:
 +   # mv /etc/pki/CA/servercert.pem /etc/pki/postfix/
 +   # mv /etc/pki/CA/serverkey.pem /etc/pki/postfix/
 +   # cp /etc/pki/CA/cacert.pem /etc/pki/postfix/
 +   # chmod 400 /etc/pki/postfix/*.pem
 +===== Postfix Konfigurieren =====
 +==== SSL/TLS für den Mailempfang ====
 +Für den verschlüsselten Empfangsmodus erweitern wir unsere Postfix-Konfigurationsdatei wie folgt:
 +   #
 +   # SSL/TLS - Schutz durch verschlüsselte Verbindungen    (Kapitel 20.2)
 +   # eingetragen am 24.03.09
 +   #
 +   # Pfade zu den Keys für den Mailempfang
 +   smtpd_tls_key_file = /etc/pki/postfix/serverkey.pem
 +   smtpd_tls_cert_file = /etc/pki/postfix/servercert.pem
 +   smtpd_tls_CAfile = /etc/pki/postfix/cacert.pem
 +   
 +   # Aktiviert STARTTLS für den Mailempfang
 +   smtpd_use_tls = yes
 +
 +==== SSL/TLS für den Mailversand ====
 +Ähnlich trivial gestaltet sich die Geschichte für den Mailversand:
 +   # Aktiviert STARTTLS für den Mailversand
 +   smtp_use_tls = yes
 +
 +==== Perfect Forward Secrecy ====
 +Unsere bereits [[centos:mail_c6:mta_5?&#diffie_hellmann_schluesselgenerierung|generierten Diffie Hellmann Schlüssel]] binden wir nun in unserer Postfix-Konfigurationsdatei ein.
 +
 +<code># Aktivierung der "Ephemeral-Diffie-Hellmann" Schlüssel
 +smtpd_tls_dh1024_param_file = /etc/postfix/dh_1024.pem
 +smtpd_tls_dh512_param_file = /etc/postfix/dh_512.pem
 +#
 +# Aktivierung des "Ephemeral Elliptic Curve Diffie-Hellman" (EECDH) Schlüsselaustausches
 +smtpd_tls_eecdh_grade = ultra
 +#
 +# Setzen des präferierten standardisierten kryptographischen Algorithmus's. (erst ab Postfix Version 2.8)
 +tls_preempt_cipherlist = yes
 +</code>
 +
 +
 +==== SSL/TLS - Logging im Maillog ====
 +Für die Dokumentation der Verschlüsselung tragen wir in der **main.cf** noch folgende Zeilen nach:
 +   # Logged in den Received-Zeilen
 +   smtpd_tls_received_header = yes
 +   smtp_tls_loglevel = 1
 +   smtpd_tls_loglevel = 1
 +Abschließend starten wir nun unseren Postfix einmal durch, damit unsere Änderungen aktiv werden.
 +   # service postfix restart
 +===== Postfix Verbindungstest =====
 +==== erster Test ====
 +Als erstes kontrollieren wir, ob unser MX nun **//STARTTLS//** als ESMTP-Komando anbietet:
 +<code># telnet mx01.nausch.org 25
 +Trying 217.91.103.190...
 +Connected to mx1.nausch.org (217.91.103.190).
 +Escape character is '^]'.
 +220 mx1.nausch.org ESMTP Postfix
 +EHLO test
 +250-mx01.nausch.org
 +250-PIPELINING
 +250-SIZE 52428800
 +250-ETRN
 +250-STARTTLS
 +250-AUTH PLAIN LOGIN DIGEST-MD5
 +250-AUTH=PLAIN LOGIN DIGEST-MD5
 +250-ENHANCEDSTATUSCODES
 +250-8BITMIME
 +250 DSN
 +QUIT
 +221 2.0.0 Bye
 +Connection closed by foreign host.
 +</code>
 +==== 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 = 2trISjzDJTPJcm3fBbxM-aRvSFL9RMfj, 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=2trISjzDJTPJcm3fBbxM-aRvSFL9RMfj/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-----
 +MIIFKjCCBBKgAwIBAgIDDFfLMA0GCSqGSIb3DQEBBQUAMDwxCzAJBgNVBAYTAlVT
 +MRcwFQYDVQQKEw5HZW9UcnVzdCwgSW5jLjEUMBIGA1UEAxMLUmFwaWRTU0wgQ0Ew
 +HhcNMTMwNTMwMTYzNDM3WhcNMTYwNjAxMTEzNzI5WjCBuzEpMCcGA1UEBRMgMnRy
 +SVNqekRKVFBKY20zZkJieE0tYVJ2U0ZMOVJNZmoxEzARBgNVBAsTCkdUNDk0NDc5
 +NTExMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29tL3Jlc291cmNlcy9jcHMg
 +KGMpMTMxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZhbGlkYXRlZCAtIFJhcGlk
 +U1NMKFIpMRUwEwYDVQQDDAwqLm5hdXNjaC5vcmcwggEiMA0GCSqGSIb3DQEBAQUA
 +A4IBDwAwggEKAoIBAQCs1+zIxqVHU5Jpf3S0MYleIQAJZoIYwxFcS4IoIFULxpPi
 +KOTXHH1XSZRDk7OVAPGKVt9VzE0CNcWKiiS4eyWCAVOb4wf778yGG1FhKVAb2EFh
 +99SJdzfN0Iqte44N01IjqVNNurV+lu74GoPP0/3iJUcgRABBXYQgWDnQnPTGOBkN
 +vYYSxbggsD+eNLtsjSzI7Etnnr0IUfoOG5i0HEN297pzMfEckDu/eUh3Vwi6CtNx
 +l8BPd5/Ui7bmxZiD/9MPYUrFoh1ShTFFLD7dE4pEVVm1gVLANtS0b1DPcp9/Q7w2
 +DuH3fa87nBo/qkV1RMTpyzctVQ8tNtnj+mA35YTRAgMBAAGjggGzMIIBrzAfBgNV
 +HSMEGDAWgBRraT1qGEJK3Y8CZTn9NSSGeJEWMDAOBgNVHQ8BAf8EBAMCBaAwHQYD
 +VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCMGA1UdEQQcMBqCDCoubmF1c2No
 +Lm9yZ4IKbmF1c2NoLm9yZzBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vcmFwaWRz
 +c2wtY3JsLmdlb3RydXN0LmNvbS9jcmxzL3JhcGlkc3NsLmNybDAdBgNVHQ4EFgQU
 +UBbZzOI29235UZ6jDjt2csIGeD8wDAYDVR0TAQH/BAIwADB4BggrBgEFBQcBAQRs
 +MGowLQYIKwYBBQUHMAGGIWh0dHA6Ly9yYXBpZHNzbC1vY3NwLmdlb3RydXN0LmNv
 +bTA5BggrBgEFBQcwAoYtaHR0cDovL3JhcGlkc3NsLWFpYS5nZW90cnVzdC5jb20v
 +cmFwaWRzc2wuY3J0MEwGA1UdIARFMEMwQQYKYIZIAYb4RQEHNjAzMDEGCCsGAQUF
 +BwIBFiVodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzMA0GCSqG                                                                                                                                                                             
 +SIb3DQEBBQUAA4IBAQCvDzskGubI84Y33jxleOMOJpJaFbXI1jNlvxzKLfut1qm9                                                                                                                                                                             
 +/otTkCw03rvtpfAsPBwa9y+dmmk8DAqltIVo1h2psMQwOrSXMKtFrIPEImXrEZru                                                                                                                                                                             
 +3Ev7yPGmm6BGop46a1aF/o9kJH7iVTh2yObwVvtB/bmOGAL/JmZLSI97EnUtCcHe                                                                                                                                                                             
 +RmUf7u8Y8LKDG4h/1Fd3e1C7PkNQjFyfF80TmN64GmegfpKnUZD2mOZSgZxmyDvw                                                                                                                                                                             
 +rrOZDFwuuEHGFWQo8Cjm6FpQrj7+gJ+8UI4I17wE5x3KBX9f1jOQiScyHNpq+3+p                                                                                                                                                                             
 +Aexjfd4miyGq0cP+4qELK85mwU3kHpbhaD9H9o7B                                                                                                                                                                                                     
 +-----END CERTIFICATE-----                                                                                                                                                                                                                    
 +subject=/serialNumber=2trISjzDJTPJcm3fBbxM-aRvSFL9RMfj/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                                                                                                                                                                                                          
 +---                                                                                                                                                                                                                                          
 +SSL handshake has read 4277 bytes and written 490 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: C876A758E505A5CF08071FD93648FDE2EA2D327D08B792C2FDDE16E0725AF164                                                                                                                                                             
 +    Session-ID-ctx: 
 +    Master-Key: B0CBC53B75E0795B52A903AF8BF6BD723B452BD312E64FF7102009049151EBF878239E5CE9B5FABA49DE3F6638F9018E
 +    Key-Arg   : None
 +    Krb5 Principal: None
 +    PSK identity: None
 +    PSK identity hint: None
 +    TLS session ticket lifetime hint: 3600 (seconds)
 +    TLS session ticket:
 +    0000 - 77 d0 1c ae d7 dd c2 c8-46 b4 c0 28 7b 4d e3 06   w.......F..({M..
 +    0010 - 77 04 74 9e e5 e9 78 53-a9 0c 36 95 09 0f d8 97   w.t...xS..6.....
 +    0020 - 6c 4e 17 05 38 5d 9f 1c-16 85 80 05 01 7c fe 19   lN..8].......|..
 +    0030 - ba 76 8d 7d 99 cc f2 e5-ee f3 94 a2 47 23 3e 03   .v.}........G#>.
 +    0040 - de 7f 3a 21 e7 f6 8e 36-d6 10 14 2b 5e 41 94 4b   ..:!...6...+^A.K
 +    0050 - 3e 31 e4 5b 69 19 0b 51-47 fd 42 8f e1 8e 6a 45   >1.[i..QG.B...jE
 +    0060 - c5 a6 6e ac b9 d5 e3 a3-d0 f8 45 10 cc 1b 2b 16   ..n.......E...+.
 +    0070 - c4 a0 5e 21 c6 7a ec f2-6d 8a 2b 20 12 4b 63 d5   ..^!.z..m.+ .Kc.
 +    0080 - 95 5c 68 82 f7 29 36 16-19 de 8b 65 11 b2 94 78   .\h..)6....e...x
 +    0090 - ff a6 db 80 b9 08 1e 5f-b2 64 d8 29 3d c8 db 68   ......._.d.)=..h
 +
 +    Start Time: 1387489519
 +    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 
 +verwendet wurden.
 +
 +Die Verbindung wurde uns im Maillog entsprechend positiv quittiert:
 +<code>Jun 15 22:46:21 vml000080 postfix/smtpd[9047]: connect from vml000020.dmz.nausch.org[10.0.0.20]
 +Jun 15 22:46:21 vml000080 postfix/smtpd[9047]: setting up TLS connection from vml000020.dmz.nausch.org[10.0.0.20]
 +Jun 15 22:46:21 vml000080 postfix/smtpd[9047]: Anonymous TLS connection established from vml000020.dmz.nausch.org[10.0.0.20]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
 +Jun 15 22:46:22 vml000080 postfix/smtpd[9047]: disconnect from vml000020.dmz.nausch.org[10.0.0.20]
 +</code>
 +
 +==== 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>
 +
 +====== Links ======
 +  * **[[centos:mail_c6:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 6<<]]**
 +  * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
 +  * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
 +