Da bei den Sicherheitseinstellung des Webservers der im Artikel nginx als Webserver installieren eingerichtet wurde, auf der Seite SSL Server Test nur eine Bewertung von „B“ rauskommt, können noch ein paar Optimierungen an den Einstellungen vorgenommen werden, dass hier die Bewertung von „A+“ gesteigert wird.
Bei einigen Hostern oder auch Webservern die schön länger nicht mehr aktualisiert wurden, könnten deutlich schlechtere Bewertungen über die Sicherheit ausgegeben werden!
Erstes Testergebnis
Hier bekommt die Seite auf dem Raspberry PI nur eine Bewertung von „B“. Es wird vor allem der Punkt „Key Exchange“ bemängelt. Aber auch andere Einstellungen können verbessert werden.
Alte Konfiguration entfernen
In der Datei /etc/nginx/nginx.conf befindet sich ein paar Einstellungen für das ssl-Modul von nginx. Die folgenden Zeilen müssen entfernt werden, da diese später in der Datei /etc/nginx/conf.d/ssl.conf angegeben werden.
sudo vim /etc/nginx/nginx.conf ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on;
dhparam generieren
Da der Test „Uses common DH primes“ mit „Yes Replace with custom DH parameters if possible“ bemängelt, wird eine neue Datei /etc/ssl/private/dhparam.pem erstellt. Die Generierung kann auf dem Raspberry Pi sehr lange (über 90 Minuten) dauern, falls die Schritte im Artikel Hardware-Zufallszahlengenerator verwenden noch nicht durchgeführt wurden. Sollte der Dienst rng-tools schon installiert sein, werden nur etwa 6 Minuten benötigt.
sudo openssl dhparam -out /etc/ssl/private/dhparam.pem 2048 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time
Liste der Verschlüsselungsmethoden ermitteln
Jetzt wird openssl ciphers abgefragt, welche Verschlüsselungsmethoden unterstützt werden. Hier wird auch noch ein Filter mit Angegeben, welche Verschlüsselungsmethoden verwendet werden sollen. Diese werden mit einem Doppelpunkt getrennt angegeben. Das Ausrufezeichen bedeutet, dass Verschlüsselungsmethoden aus dieser Kategorie nicht ausgegeben werden sollen. Zum Abschluss werden diese mit @STRENGTH sortiert. Diese Auflistung wird später noch für die Konfiguration benötigt.
openssl ciphers 'HIGH:!LOW:!eNULL:!NULL:!aNULL:@STRENGTH' ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA:PSK-AES128-CBC-SHA
Konfiguration anpassen
Hier werden die generierte Datei /etc/ssl/private/dhparam.pem in der Einstellung ssl_dhparam und die Verschlüsselungsmethoden in der Einstellung ssl_ciphers verwendet. Hier habe ich den kompletten Inhalt der Datei auflistet, wie diese bei mir aussieht. Diese Einstellungen gelten für alle VHosts die der Raspberry PI über HTTPS bereitstellt und müssen damit nur einmal vorgenommen werden.
sudo vim /etc/nginx/conf.d/ssl.conf ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/private/dhparam.pem; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:SRP-AES-128-CBC-SHA:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA:PSK-AES128-CBC-SHA"; # Session-Cache mit 1 MB (für etwa 4000 Sessions) aktivieren. ssl_session_cache shared:ssl:1m; # Komplette Zertifikatskette an den Client ausliefern. ssl_stapling on; # Eintrag des Nameservers wird für das Stapling benötigt. resolver 8.8.8.8 8.8.4.4 valid=8h; resolver_timeout 10s;
Host anpassen
Es wird noch die Zeile mit „Strict-Transport-Security“ hinzugefügt. Dies teilt dem Browser mit, dass die Seite die nächsten 31.536.000 Sekunden (365 Tage) per HTTPS erreichbar ist und fehlendes HTTPS ein Fehler ist und sich nicht mit dem Server verbunden werden soll. Dies kann z.B. passieren, wenn die Domain bei einem DDNS-Anbieter aufgrund von Inaktivität freigegeben und von einer anderen Person registriert wurde.
sudo vim /etc/nginx/sites-enabled/blar-test.spdns.de.conf server { server_name blar-test.spdns.de; listen 80 default_server; listen [::]:80 default_server; rewrite ^ https://$server_name$request_uri? permanent; } server { include "snippets/letsencrypt.conf"; server_name blar-test.spdns.de; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/blar-test.spdns.de/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blar-test.spdns.de/privkey.pem; add_header "Strict-Transport-Security" "max-age=31536000"; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }
Konfiguration testen
sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Webserver neustarten
sudo systemctl restart nginx
Einstellungen testen
Sollte der Aufruf per HTTPS in deinem Browser funktionieren, kann die Sicherheit des Webservers mit dem SSL Server Test geprüft werden.
Wie zu sehen wurde die Arbeit mit einem „A+“ bewertet und die Besucher unserer Seiten auf den Raspberry PI sind jetzt noch sicherer unterwegs.
Kommentare sind geschlossen.