nginx-Konfiguration für TLS 1.2
Nachdem Mozilla, Google, Microsoft und Co. die Unterstützung für TLS 1.0/1.1 im Jahr 2020 abschalten möchten, erreichten mich Fragen zu meiner (nginx-)Konfiguration. Anbei die wichtigsten Ausschnitte:
## TLS Settings ## ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256; # Load DH parameters ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ecdh_curve secp521r1:secp384r1:prime256v1; # Shared cache size 30MB ssl_session_cache shared:SSL:30m; # Default timeout is 5m ssl_session_timeout 10m;
Ich erlaube ausschließlich TLS 1.2 mit AEAD-kompatiblen Cipher-Suiten. Ab TLS 1.3 sind nur noch AEAD-basierte Cipher-Suiten zugelassen.
In der Reihenfolge bevorzuge ich zunächst die Stromchiffre CHACHA20 (RFC 7539) mit POLY1305 – im Gegensatz zur AES-Blockchiffre mit dem Betriebsmodi GCM soll die Kombination CHACHA20/POLY1305 insbesondere auf Prozessoren, die keine native Beschleunigung für GCM mitbringen, schneller sein. Das betrifft bspw. die mobilen Prozessoren von Smartphones.
Weiterhin bevorzuge ich zunächst ECDSA-kompatible Cipher-Suiten, da die meisten meiner Seiten über ein ECDSA-Zertifikat ausgeliefert werden.
Hinzu kommen noch sicherheitsrelevante HTTP-Antwort-Header:
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Frame-Options DENY; add_header Referrer-Policy "same-origin"; add_header Expect-CT "enforce, max-age=21600";
Je nach Domain dann noch OCSP-Stapling:
# OCSP-Stapling ssl_stapling on; ssl_stapling_verify on;
Und je nach Domain eine angepasste Content-Security-Policy (CSP):
add_header Content-Security-Policy "default-src 'none'";
oder für den Kuketz-Blog:
add_header Content-Security-Policy "default-src 'none'; img-src 'self' https://media.kuketz.de; style-src 'self' 'unsafe-inline'; font-src 'self'; base-uri 'none';frame-ancestors 'none'; form-action 'self'; block-all-mixed-content";
Mit Observatory by Mozilla oder Hardenize könnt ihr die umgesetzten Sicherheitsmaßnahmen dann überprüfen. Weitere Tools findet ihr hier: Online-Scanner: Tools für Sicherheit und Datenschutz.
Speziell für die Prüfung SSL/TLS nehme Qualys SSL Labs, CryptCheck oder das Kommandozeilenwerkzeug testssl.sh.