====== 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)((Quelle: https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ (04. April 2016) ))
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 Apache2((Basiert auf Let's Encrypt Zertifikaten))
NameVirtualHost 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/
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
===== 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 [[comp:linux:mkca|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) =====
{{:comp:linux:qualityssl.png?200 |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 ;-)