HSTS weist einen Browser an, für Ihre Domain für eine festgelegte Dauer einfaches http zu verweigern. Es schließt einen echten Angriff — die erste Anfrage vor der Weiterleitung — und der Browser merkt es sich, weshalb es genau deshalb behutsam eingeführt werden muss.

Der Header

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Was ihn gefährlich macht

Er wird gemerkt und lässt sich nicht zurückrufen. Senden Sie max-age=31536000, und jeder Browser, der ihn gesehen hat, verweigert ein Jahr lang http. Läuft Ihr Zertifikat danach ab oder hat eine Subdomain gar keines, bekommen Besucher eine Warnung, an der sie nicht vorbeiklicken können — und den Header zu entfernen bewirkt nichts, weil die Anweisung schon in ihrem Browser steht.

Führen Sie ihn in Stufen ein

# week 1 - five minutes
add_header Strict-Transport-Security "max-age=300" always;

# week 2 - a day
add_header Strict-Transport-Security "max-age=86400" always;

# week 3 - a week, then a year once nothing has broken
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

includeSubDomains ist der Teil, der die Leute erwischt

Er gilt für jede Subdomain, auch die vergessenen: eine alte Staging-Seite, ein internes Werkzeug, ein Alt-Host ohne Zertifikat. Sie alle werden auf einen Schlag über http unerreichbar. Vergewissern Sie sich, dass jede Subdomain ein gültiges Zertifikat hat, bevor Sie ihn hinzufügen.

for h in www shop staging api mail; do
  printf '%-8s ' "$h"
  curl -sS -o /dev/null -w '%{http_code}\
' "https://$h.example.com/" || echo FAIL
done

Preloading ist praktisch endgültig

Die Preload-Liste ist in die Browser einkompiliert, die Regel gilt also schon vor jedem Besuch. Eine Entfernung braucht Monate, bis sie alle erreicht. Fügen Sie das preload-Token erst hinzu, wenn die Website ein Jahr lang mit vollem max-age ohne Zwischenfall gelaufen ist.

Wenn Sie schon ausgesperrt sind

Reparieren Sie das Zertifikat — das ist die einzige echte Antwort. Für Ihren eigenen Rechner kann Chrome unter chrome://net-internals/#hsts eine Domain löschen; das erlaubt Ihnen zu testen und hilft Ihren Besuchern kein bisschen.

HSTS lohnt sich. Sicher wird es durch automatische Erneuerung — siehe Erneuerung, die stillschweigend fehlschlägt.