====== 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 ;-)