Nach einigem lesen zum Thema SSL und TLS und Cipher und und und, habe ich jetzt mal meine nginx Konfiguration angepasst. Erfolgreiches testen hat mich zu den Schluß kommen lassen, dass wenige Cipher reichen um ein A+ im SSL Labs Test zu bekommen.

Nginx Config

Die folgende Konfiguration sollte in der Datei /etc/nginx/nginx.conf stehen:

server_tokens off;

add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header 'Referrer-Policy' 'no-referrer';

Site Config

Die folgende Konfiguration sollte für die jeweiligen Seite angelegt werden:

server {
        listen 80; 
        listen [::]:80;

        server_name exmaple.de www.example.de;
        if ( $host != $server_name ) { 
            return 301 https://$server_name$request_uri;
        }
        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name example.de www.example.de;
        if ( $host != $server_name ) { 
            return 301 https://$server_name$request_uri;
        }

        ssl_certificate /etc/ssl/fullchain.pem;
        ssl_certificate_key /etc/ssl//privkey.pem;

        ssl_protocols TLSv1.2;
        ssl_prefer_server_ciphers on; 
        ssl_dhparam /etc/ssl/private/dhparam.pem;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
        ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
        ssl_session_timeout  10m;
        ssl_session_cache shared:SSL:50m;
        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 127.0.0.1 valid=300s;
        resolver_timeout 5s; 
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;   
...
}

ssl_protocols

Die neueren Versionen von nginx unterstützen schon TLSv1.3. Ich empfehle daher, zu testen ob eure nginx Version das unterstützt und diese dann auch einzubinden.

resolver

Ich empfehle hier einen lokalen am besten unbound.

Und fertig ist die sichere nginx Server Konfiguration.

Update 1.0

Cipher angepasst, einige neue Option, Hinweis zu TLSv1.3 hinzugefügt.