Nginx – Anpassung SSL Protokolle und Cipher Suites

Letzte Aktualisierung am 20.07.2022, 15:07:20 Uhr

Ich werde immer wieder gefragt, ob es zu dem Beitrag Apache – Anpassung SSL Protokolle und Cipher Suites auch eine Referenz für Nginx gibt? Der einzigste Beitrag, der das kurz und bündig beschreibt ist aus dem Jahr 2015. Und auf Grund des Alters natürlich schon ein wenig eingestaubt. Daher habe ich mich entschlossen diesen zu überarbeiten.

Als Betriebssystem setze ich Ubuntu 20.04 LTS ein. In den Repositories von Canonical wird aktuell Nginx in Version 1.18.0 installiert.

nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

Das bedeutet, dass das SSL Protokoll TLS 1.3 zur Verfügung steht.

Im Gegensatz zu Apache gibt es keine zentrale, vorgefertige Konfiguration. Das liegt daran, dass beim Nginx die Konfiguration in der jeweiligen Konfiguration einer ‚Site‘ vorgenommen wird. Ich habe für diesen Beitrag eine neue vollständige, neue Konfiguration auf Basis der Datei /etc/nginx/sites-enabled/default erstellt.

Um das untenstehende Ergebnis bei Qualys zu erreichen, muss das verwendete SSL-Zertifikat eine Schlüssel (Key) von 4096 Bit haben. Denn standardmäßig (out of the box) wird nach wie vor 2048 Bit verwendet. Das bewirkt beim SSL Test in der Kategorie „Key Exchange“ 90 anstatt 100 Punkte.

Die ‚Site‘ hört auf den Namen nginx.test.wydler.eu und die Konfigurationsdatei heißt nginx.test.wydler.eu.conf. Die Datei ist wie folgt aufgebaut:

server {
        listen 80;
        listen [::]:80;
        server_name static.141.251.108.65.clients.your-server.de ;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name static.141.251.108.65.clients.your-server.de ;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        ssl_certificate /etc/letsencrypt/live/static.141.251.108.65.clients.your-server.de/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/static.141.251.108.65.clients.your-server.de/privkey.pem;

        ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-CCM:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA";
        ssl_prefer_server_ciphers on;
        ssl_ecdh_curve secp521r1:secp384r1:prime256v1;
        ssl_dhparam /etc/ssl/dhparams4096.pem;

        resolver_timeout 5s;
        ssl_stapling on;
        ssl_stapling_verify on;

        ssl_session_cache shared:le_nginx_SSL:1m;
        #ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 5m;
        ssl_buffer_size 1400;
        ssl_session_tickets off;

        add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

        location / {
                try_files $uri $uri/ =404;
        }
}

 

DH-Keys erzeugen:

openssl dhparam -out /etc/ssl/dhparams4096.pem 4096

Dieser Vorgang kann je nach System einige Minuten in Anspruch nehmen. Zeit für einen Tee oder Kaffee. 🙂

Abschließend muss die angepasste Konfiguration eingelesen werden:

service nginx configtest
service nginx restart

Das Ergebnis bei Qualys SSL Server Test kann sich sehen lassen:

Die SSL Protokolle und Cipher Suites müssen natürlich mit der Zeit gepasst werden.

Abonnieren
Benachrichtige mich bei
1 Kommentar
neueste
älteste
Inline Feedbacks
View all comments
Is a wide range to c
23.04.2020 05:52

Your programming knowledge is impressive. Everything is told and shown in an accessible language. In your posts, I repeatedly found a solution to important issues.