Christopher Böhnisch
How-To | Webserver sicher einrichten
Mit dem SSL Server Test von Qualys lässt sich die SSL/TLS Konfiguration deines Webservers überprüfen. Hierbei werden Ciphers, Zertifikate, Protokolle und vieles mehr geprüft. Wie ich das nach meiner Ghost Blog Installation gemacht habe, zeige ich dir im nachfolgenden Beitrag.
Website mit SSL-Labs prüfen
Im ersten Schritt, habe ich die Einstellungen direkt nach der Installation geprüft und einen ersten Durchlauf des Tests gemacht.

Dabei ist gleich das B-Rating zu erkennen mit dem darunterliegendem Grund der veralteten TLS Version im gelb/orangenen Balken. Sowohl das Zertifikat, der Diffi-Hellmann Key Exchange, als auch die Cipher sind mit 90% absolut ausreichend für unseren Blog. Wir werden uns nun die SSL Einstellungen am Server ansehen.
NGINX SSL Konfiguration
Die SSL Konfiguration findest du im Pfad /etc/nginx/snippets/ssl-params.conf:
sudo vi /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload';
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/nginx/snippets/dhparam.pem;
Wir werden uns die Einstellungen hinsichtlich 'ssl_protocols'und 'ssl_ciphers'näher ansehen. Dabei hilft das Wiki von Mozilla, dem wir die empfohlenen SSL Einstellungen entnehmen können. Im Punkt "Mozilla intermediate TLS configuration" finden wir die zum jetzigen Stand (März 2020) empfohlenen SSL-Einstellungen zwischen Sicherheit und Client-Kompatibilität.

Damit wir nun ein A+ Rating erreichen können, müssen wir die SSL Konfiguration in den Punkten 'ssl_protocols' und 'ssl_ciphers' vom NGINX Server folgendermaßen editieren. Hierbei wurde das TLSv1.3 Protokoll hinzugefügt und TLSv1, sowie TLSv1.1 deaktiviert und die Ciphers für TLSv1.3 und TLSv1.2 ausgewählt.
ssl_protocols TLSv1.3 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload';
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/nginx/snippets/dhparam.pem;
Nun speichern wir die Datei und starten den NGINX Server neu:
sudo systemctl restart nginx
Nachdem der Dienst neugestartet wurde starten wir den Test erneut und erhalten nun ein A+ Rating. Damit haben wir unseren NGINX Webserver mit dem jetzigen Stand abgesichert!

Video-Anleitung: