Was ist PFS

    Durch den Einsatz von PFS lässt sich eine höhere Sicherheit bei HTTPS-Übertragungengewährleisten, als ohne. Da stellt sich natürlich die Frage, warum HTTPS vorher unsicher war. Dies versteht man am besten an einem Beispiel, wie ein HTTPS-Verbindungsaufbau statt findet.

    • Client: Ruft https://blog.cscholz.io auf.
    • Server: Übermittelt dem Client einen öffentlichen Schlüssel, der von einer Zertifikatsstelle bestätigt wurde.
    • Client: Wendet sich an die Zertifizierungsstelle und prüft die Echtheit des Zertifikates. Nachdem diese bestätigt wurde, schlägt der Client dem Server ein Sitzungsschlüssel vor, welchen er mit dem öffentlichen Schlüssel verschlüsselt und zurück an den Server schickt.
    • Server: Entschlüsselt nun mit seinem privaten Schlüssel die Übertragung und verwendet den erhaltenen Sitzungsschlüssel für die weitere Übertragungen.

    Schneidet jemand die verschlüsselte Übertragung mit, kann er erstmal nichts damit Anfangen, solange, bis er in der Zukunft irgendwann mal an den privaten Schlüssel des Servers kommt. Denn dann kann den Part der Übertragung entschlüsseln, in dem sich Client und Server auf den gemeinsamen Sitzungsschlüssel geeinigt haben. Und mit diesem kann anschliessend die gesamte restliche Übertragung entschlüsselt werden.

    PFS verhindert diesen Ansatz, in dem mit Hilfe eines Mathematischen Ansatzes (Diffie-Hellmann Schlüsselaustausch) sich beide Parteien auf einen Sitzungsschlüssel einigen, der jedoch nie über die Leitung übertragen wurde. Somit kann man selbst dann den Datenstrom nicht entschlüsseln, wenn man den Mitschnitt sowie den privaten Schlüssel des Servers besitzt.

    Erst IE Versionen größer 8 können jedoch überhaupt mit PFS umgehen.

    PFS mit Apache 2.2

    Im Apache 2.2 kann nur CDE (Elliptisch Kurve Algorithmus) aktiviert werden, was zwar etwas langsamer, aber dennoch sicherer ist. Um es zu aktivieren müssen der Datei /etc/Apache2/mods-available/ssl.conf nachfolgende Zeilen geämdert/hinzugefügt werden. Bitte darauf achten, dass die Parameter nicht mehrmals definiert sind, denn greift die zuletzt gesetzte Einstellung.

    SSLCipherSuite HIGH:MEDIUM:!ADH
    
    SSLProtocol all -SSLv2

    Zu bedenken ist, dass die Kombination Apache 2.2 mit IE 10 nicht zur PFS-Verwendung führt, da diese Kombination erst ab Apache 2.4 funktioniert

    PFS mit Apache 2.4

    Ebenfalls in der Datei /etc/apache2/mods-available/ssl.conf folgende Einstellungen vornehmen:

    SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:DHE+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
    
    SSLHonorCipherOrder on

    Apache PFS testen

    Ob die PFS nun auch verwendet wird, kann man entweder über die bash oder über ein Firefox Plugin testen.

    openssl s_client -cipher 'ECDHE:DH' -connect mx02.blog.cscholz.io:443
    

    ist das Ergebnis eine Ciphersuite, welche mit DH bzw. ECDH beginnt, bietet der Server PFS an.

    PFS mit Dovecot & Postfix

    Für Dovecot & Postfix gibt es vom Heinlein-Support schon eine sehr umfangreiche Anleitung, weswegen ich mir hier eine erneute Ausführung spare.

    Weitere Links

    Nachtrag 08.07.2014

    Sollte es trotz der Änderungen kein ECDH bei einer SSL-Verbindung verwendet zu werden, lohnt sich ein Blick auf die CipherSuiten des Servers:

    openssl ciphers -v 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA

    bzw. ein Blick in die Apache conf-Datei in der das Zertifikate angegeben ist, ob dort wiedersprüchliche Angaben existieren:

    <VirtualHost *:443>
        ...
        SSLEngine on
        SSLCertificateFile      /path/to/signed_certificate
        SSLCertificateChainFile /path/to/intermediate_certificate
        SSLCertificateKeyFile   /path/to/private/key
        SSLCACertificateFile    /path/to/all_ca_certs
        SSLProtocol             all -SSLv2
        SSLCipherSuite          ...
        SSLHonorCipherOrder     on
        SSLCompression          off
    </VirtualHost>

    Ein Kommentar

    1. Hallo,

      der Cipher-Suite-String funktioniert nicht bei RHEL / Centos 5, da damit keine Cipher übrig bleibt (OpenSSL in Version 0.98).

      Besser ist

      ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:ALL:!aNULL:!ADH:!3DES:!EXP:!RC4:!kRSA:!kKRB5:!aDSS:!DES:!aPSK:!kECDH

      Der String funktioniert auch bei neueren OpenSSL-Versionen. Er erlaubt nur Ciphers mit FS.

      Mehr dazu steht unter http://www.tuxad.de/blog/archives/ssl/index.html

      Viele Grüße

      Frank

       

    Leave A Reply