HSTS demande au navigateur de refuser le http simple pour votre domaine pendant une durée fixée. Il ferme une attaque bien réelle — la toute première requête, avant la redirection — et le navigateur s'en souvient : c'est précisément pour cela qu'il faut l'introduire avec précaution.
L'en-tête
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Ce qui le rend dangereux
Introduisez-le par étapes
# 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 est la partie qui piège les gens
Il s'applique à chaque sous-domaine, y compris ceux que vous avez oubliés : une vieille préproduction, un outil interne, un hôte hérité sans certificat. Tous deviennent inaccessibles en http, d'un seul coup. Vérifiez que chaque sous-domaine possède un certificat valide avant de l'ajouter.
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
Le préchargement est permanent, en pratique
La liste de préchargement est compilée dans les navigateurs : la règle s'applique avant même la première visite. Un retrait met des mois à atteindre tout le monde. N'ajoutez pas le jeton preload avant que le site ait tourné un an à max-age plein sans incident.
Si vous êtes déjà enfermé dehors
Réparez le certificat : c'est la seule vraie réponse. Pour votre propre machine, Chrome peut effacer un domaine depuis chrome://net-internals/#hsts, ce qui vous permet de tester et ne fait rien pour vos visiteurs.
