Qu’est-ce que HSTS ?
HSTS signifie HTTP Strict Transport Security. C’est un seul en-tête de réponse, Strict-Transport-Security. Il dit au navigateur : pour ce site, utilise uniquement HTTPS à partir de maintenant.
Une fois l’en-tête reçu, le navigateur transforme chaque lien http:// en https:// avant d’envoyer quoi que ce soit. De plus, il empêche le visiteur d’ignorer une alerte de certificat. Ainsi, personne ne peut ramener ce visiteur discrètement vers HTTP.
La faille que HSTS referme
La plupart des sites redirigent déjà HTTP vers HTTPS. C’est bien, mais il reste une faille. La toute première requête part encore en HTTP simple, et c’est seulement ensuite que le serveur répond par la redirection.
Sur un Wi-Fi public, cette première requête est le moment faible. Un attaquant sur le même réseau peut répondre le premier et garder le visiteur sur une fausse copie HTTP de votre site. Cette technique s’appelle le SSL stripping.
HSTS supprime ce moment pour chaque visite après la première. Comme le navigateur connaît déjà la règle, il n’envoie jamais la requête HTTP. En outre, le saut de redirection disparaît, donc la page s’ouvre aussi un peu plus vite.
Ajouter HSTS dans htaccess
D’abord, vérifiez que chaque page fonctionne en HTTPS, y compris les images, les scripts et les sous-domaines utilisés. Ensuite, ajoutez une ligne au fichier .htaccess sous Apache :
Header always set Strict-Transport-Security "max-age=300" Commencez avec un max-age court de 300 secondes pendant les tests. Si quelque chose casse, les navigateurs oublient la règle en cinq minutes. Sous Nginx, la même ligne va dans le bloc server HTTPS :
add_header Strict-Transport-Security "max-age=300" always; 
Puis vérifiez le résultat avec notre HTTP Header Checker gratuit. Il montre si l’en-tête arrive et quel max-age il utilise.
Monter max-age sans risque
HSTS s’active vite mais se désactive lentement. Un navigateur garde la règle pendant tout le max-age, même si vous retirez l’en-tête. C’est pourquoi il faut monter par paliers :
- 300 secondes (cinq minutes) pendant les tests.
- 86400 secondes (un jour) quand rien n’a cassé.
- 604800 secondes (une semaine) après quelques jours calmes.
- 31536000 secondes (un an) quand toutes les pages tournent en HTTPS depuis un moment.
Ainsi, un an est la valeur que la plupart des guides conseillent pour un site en ligne. C’est aussi le minimum pour la liste de préchargement.
includeSubDomains et preload
L’option includeSubDomains applique aussi la règle à chaque sous-domaine. Ajoutez-la seulement quand tous les sous-domaines marchent en HTTPS, y compris les anciens, comme un outil interne ou un panneau de messagerie.
L’option preload va encore plus loin. Les navigateurs intègrent une liste de sites HSTS, si bien que même la première visite passe en HTTPS. Toutefois, sortir de cette liste prend des mois. Donc, inscrivez votre domaine sur hstspreload.org uniquement quand vous êtes sûr.
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Comment lire l’en-tête HSTS
L’en-tête compte jusqu’à trois parties. Ainsi, chacune est une promesse faite à chaque navigateur qui vous visite.
max-age
C’est le nombre de secondes pendant lequel le navigateur garde la règle. Le minuteur repart à chaque visite qui envoie l’en-tête. Donc un visiteur régulier n’en voit jamais vraiment la fin.
includeSubDomains
Cette option couvre chaque nom sous votre domaine, comme shop.example.com et mail.example.com. Par conséquent, un sous-domaine oublié sans HTTPS ne marche plus pour quiconque a vu la règle.
preload
Cette option dit seulement que vous acceptez d’entrer dans la liste intégrée des navigateurs. Seule, elle ne fait cependant rien. Vous devez donc quand même inscrire le domaine.
D’où l’en-tête doit venir
Les navigateurs n’acceptent l’en-tête que sur une connexion HTTPS valide. De plus, pour le préchargement, le domaine sans www doit l’envoyer, pas seulement www.
HSTS sur d’autres serveurs et CDN
L’idée est la même partout : envoyer un en-tête sur chaque réponse HTTPS. Ainsi, seul l’endroit où vous l’écrivez change.
Cloudflare
Dans le tableau de bord Cloudflare, ouvrez SSL/TLS, puis Edge Certificates, et activez HSTS. Choisissez le max-age à cet endroit. Comme Cloudflare envoie lui-même l’en-tête, inutile d’ajouter aussi une ligne dans htaccess.
WordPress
Si vous ne pouvez pas modifier le serveur, une extension de sécurité peut ajouter l’en-tête. Cependant, une règle serveur est plus rapide, car elle agit avant même le démarrage de PHP.
IIS
Sur un serveur Windows, ajoutez un en-tête personnalisé nommé Strict-Transport-Security dans les en-têtes de réponse HTTP du site. Ensuite, vérifiez-le avec le vérificateur d’en-têtes.
Tester et retirer HSTS
D’abord, testez depuis l’extérieur avec notre HTTP Header Checker. Ainsi, il montre l’en-tête exact et le max-age que reçoivent les visiteurs.
Dans Chrome, vous pouvez aussi ouvrir chrome://net-internals/#hsts et interroger votre domaine. Il indique si le navigateur a gardé la règle et quand elle expire. Sur la même page, vous pouvez effacer la règle de votre propre navigateur pendant vos tests.
Pour retirer HSTS pour tout le monde, envoyez max-age=0 pendant un temps au lieu de supprimer l’en-tête. Puis chaque navigateur qui passe oublie la règle. Enfin, vous pouvez retirer la ligne.
Erreurs fréquentes
- Commencer avec un max-age d’un an. Si HTTPS casse, les visiteurs restent bloqués jusqu’à la fin de l’année.
- Ajouter includeSubDomains alors qu’un sous-domaine n’a pas encore de certificat.
- Envoyer l’en-tête en HTTP. Les navigateurs l’ignorent ; il ne compte qu’en HTTPS.
- Oublier le mot
always, si bien que les pages d’erreur partent sans l’en-tête. - Inscrire le domaine à la liste de préchargement pour essayer.
En bref, HSTS tient en une ligne, mais max-age est une promesse. Montez-le lentement et vérifiez chaque étape avec le HTTP Header Checker. Pour le détail de chaque directive, voyez le guide MDN sur Strict-Transport-Security.
Questions et réponses
À quoi sert HSTS ?
Il dit au navigateur d’utiliser uniquement HTTPS pour votre site pendant une durée donnée. Après la première visite, le navigateur n’envoie plus jamais de requête HTTP simple à votre site.
Faut-il garder la redirection HTTP vers HTTPS avec HSTS ?
Oui. La redirection couvre la toute première visite, avant que le navigateur ne voie l’en-tête. HSTS couvre toutes les visites suivantes.
Quel max-age choisir pour HSTS ?
Commencez avec 300 secondes pendant les tests, puis montez par paliers. Pour un site en ligne, 31536000 secondes (un an) est la valeur finale habituelle.
Comment retirer HSTS ?
Envoyez l’en-tête avec max-age=0. Les navigateurs effacent la règle à la prochaine visite en HTTPS. D’ici là, ils gardent l’ancienne règle.
HSTS est-il bon pour le SEO ?
Pas directement. En revanche, il supprime un saut de redirection pour les visiteurs qui reviennent et les protège, ce qui aide la vitesse et la confiance.
Pourquoi mon en-tête HSTS n’apparaît pas ?
Vérifiez qu’il est envoyé en HTTPS, que le module headers d’Apache est actif et qu’un CDN ou un cache ne le supprime pas. Notre HTTP Header Checker montre ce qui arrive vraiment.
Qu’est-ce que le préchargement HSTS ?
Une liste intégrée aux navigateurs, pour que même la première visite passe en HTTPS. Il faut un max-age d’un an, includeSubDomains et preload, puis inscrire le domaine sur hstspreload.org.
HSTS peut-il bloquer des visiteurs ?
Oui, si HTTPS casse pendant qu’un long max-age est actif. C’est pourquoi on commence court et on monte seulement quand tout fonctionne.
HSTS ralentit-il mon site ?
Non. Il supprime la redirection HTTP vers HTTPS pour les visiteurs qui reviennent, donc les pages s’ouvrent un peu plus vite.
Où activer HSTS sur Cloudflare ?
Dans SSL/TLS, Edge Certificates, rubrique HTTP Strict Transport Security. Ainsi, inutile de l’ajouter aussi dans htaccess.
Puis-je ajouter HSTS avec une extension WordPress ?
Oui, beaucoup d’extensions de sécurité savent l’envoyer. Pourtant, une règle dans htaccess ou Nginx est plus rapide et couvre aussi les fichiers hors WordPress.
Pourquoi mon en-tête HSTS est-il envoyé deux fois ?
Le serveur et le CDN ou une extension l’ajoutent en même temps. Gardez une seule source, pour que le max-age soit clair.
Comment voir si Chrome a gardé ma règle HSTS ?
Ouvrez chrome://net-internals/#hsts et interrogez votre domaine. Vous pouvez aussi y effacer la règle pour votre navigateur.
HSTS fonctionne-t-il sur localhost ?
Les navigateurs ignorent HSTS sur localhost et sur les adresses IP, donc on le teste sur un vrai domaine.
Que se passe-t-il si mon certificat expire avec HSTS actif ?
Les visiteurs qui connaissent la règle ne peuvent pas ignorer l’alerte. Voilà pourquoi le renouvellement automatique compte encore plus avec HSTS.
HSTS est-il la même chose qu’une redirection 301 ?
Non. La redirection est envoyée par le serveur à chaque requête HTTP. En revanche, HSTS fait sauter complètement la requête HTTP au navigateur.
Tous les sous-domaines doivent-ils être en HTTPS avant includeSubDomains ?
Oui. Vérifiez chaque sous-domaine, y compris les anciens et les outils internes, avant d’ajouter l’option.
Combien de temps pour entrer dans la liste de préchargement ?
En général de quelques semaines à quelques mois, car la liste arrive avec les nouvelles versions des navigateurs.
HSTS protège-t-il contre toutes les attaques ?
Non. Il empêche le retour vers HTTP simple. Il vous faut donc d’autres en-têtes, comme une Content-Security-Policy, pour les autres risques.
Le SEO Checker vérifie-t-il HSTS ?
Oui. Notre SEO Checker indique si l’en-tête est envoyé et renvoie vers ce guide quand il manque.