Inhaltsverzeichnis

Erste Hilfe bei mangelhafter SSL-Verschlüsselung

Wer sich bei einer Seite wie https://www.ssllabs.com/ ärgert, dass der eigene Server mit einer Config aus dem gefühlt letzten Jahrtausend mit einem F bewertet wird (wie ich), muss die Sicherheit aufrüsten. Mit ein paar Config-Zeilen ist das schlimmste schnell aus dem Weg geschafft.

Webserver apache2.2

Schlecht (=Rating F)

SSLEngine on
SSLCertificateFile /etc/apache2/ssl/my.crt
SSLCertificateKeyFile /etc/apache2/ssl/my.key
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

Gut (=Rating B)1)

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

Mehr Infos: https://cipherli.st/

Sehr gut (A+)

Komplette Config für Apache22)

NameVirtualHost 1.2.3.4:443
<VirtualHost 1.2.3.4:443>
        ServerName example.com:443
        ServerAdmin nobody@example.com
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol All -SSLv2 -SSLv3
        SSLHonorCipherOrder On
        Header always set Strict-Transport-Security "max-age=63072000"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        DocumentRoot /srv/httpd/www/
        <Directory /srv/httpd/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>

Let's Encrypt einsetzen

Mit der Software Let's Encrypt kann man in allen bekannten Systemen als gültig anerkannte Zertifikate erstellen. Aus meiner Sicht sinnvoller ist zwar eine eigene CA, aber man kann natürlich nicht in allen Fällen auf den zu versorgenden Client-Systemen diese installieren. Überall diese SSL-Mafia ^^ Let's Encrypt ist auch ein fürchterliches Python-Programm, was mit root-Rechten laufen muss 8-o und sich bei jedem Start updated.

Zertifikate können erstellt werden, wenn eine Domain auf ein bestimmtes Verzeichnis zeigt. Zum Generieren von Zertifikaten für Subdomains kann man diese temporär einfach alle auf ein Verzeichnis zeigen lassen, was als Arbeitsverzeichnis dient. Der Online-Service muss unter der korrespondierenden NICHT-SSL-Adresse den Pfad .well-known/… erreichen können, der im Rahmen der Zertifikate-Generierung erzeugt wird.

./letsencrypt-auto certonly --webroot -w /var/www -d example.com

Apache frisst die Zertifikate wie in der A+-Config im vorherigen Abschnitt beschrieben. Hier folgen noch ein paar andere Serverdienste, denen man die Dinger unterjubeln kann, wenn man sie passend zusammenschustert ;-)

exim

cp /etc/letsencrypt/live/mail.example.com/fullchain.pem /etc/exim4/cert/exim.crt
cp /etc/letsencrypt/live/mail.example.com/privkey.pem /etc/exim4/cert/exim.key

courier

cat /etc/letsencrypt/live/mail.example.com/cert.pem /etc/letsencrypt/live/mail.example.com/fullchain.pem /etc/letsencrypt/live/mail.example.com/privkey.pem > /etc/courier/combined.pem

ejabberd

cat /etc/letsencrypt/live/im.example.com/cert.pem /etc/letsencrypt/live/im.example.com/privkey.pem > /etc/ejabberd/ejabberd.pem

Prosody

cp /etc/letsencrypt/live/chat.rkcsd.eu/cert.pem /etc/prosody/certs/cert.pem
cp /etc/letsencrypt/live/chat.rkcsd.eu/privkey.pem /etc/prosody/certs/privkey.pem

Das Resultat (zumindest beim Webserver)

Quality SSL Labs Result

Bei den restlichen Diensten (nicht Webserver) ist die SSL-Konfig meist zumindest gut. Exim muss ja auch mit nicht ganz so qualitativen SSL-Konfigurationen sprechen können, inkl. keiner Verschlüsselung. Validieren wird eh keiner was anderes als HTTP ;-)

2) Basiert auf Let's Encrypt Zertifikaten