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.

Der Kuketz-Blog ist spendenfinanziert! Mitmachen ➡