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.
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>
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 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
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
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
cat /etc/letsencrypt/live/im.example.com/cert.pem /etc/letsencrypt/live/im.example.com/privkey.pem > /etc/ejabberd/ejabberd.pem
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
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