HSTS (HTTP Strict Transport Security)

E-mail et Sécurité
Un en-tête de sécurité qui oblige les navigateurs à se connecter uniquement à un site Web via HTTPS, empêchant ainsi les attaques de rétrogradation.
← Retour au Glossaire

Qu’est-ce que HSTS ?

HSTS (HTTP Strict Transport Security) est un mécanisme de sécurité Web qui indique aux navigateurs d'interagir uniquement avec un site Web via HTTPS, jamais HTTP. Une fois qu'un navigateur voit un en-tête HSTS, il mettra automatiquement à niveau toutes les requêtes futures vers HTTPS et refusera de se connecter via HTTP, même si l'utilisateur tape explicitement http://.

Pourquoi HSTS est important

Même avec un certificat SSL valide, des vulnérabilités existent :

Attaque par suppression de SSL

1. L'utilisateur saisit « example.com » (sans https://)

2. L'attaquant intercepte la requête HTTP initiale

3. L'attaquant relaie la requête vers HTTPS, mais présente HTTP à l'utilisateur

4. L'utilisateur pense être protégé, mais l'attaquant voit tout

HSTS empêche cela en s'assurant que les navigateurs ne font jamais cette requête HTTP initiale.

Avantages de HSTS

Syntaxe de l’en-tête HSTS

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Directives

DirectiveDescription
max-ageNombre de secondes pendant lesquelles HSTS est mémorisé (31536000 = 1 an)
includeSubDomainsApplique HSTS à tous les sous-domaines
preloadConsentement à l'inclusion dans la liste de préchargement des navigateurs

Mise en œuvre de HSTS

Nginx

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

Apache

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

Cloudflare

Activer dans SSL/TLS → Edge Certificates → HTTP Strict Transport Security

Express.js

const helmet = require('helmet');

app.use(helmet.hsts({

maxAge: 31536000,

includeSubDomains: true,

preload: true

}));

Liste de préchargement HSTS

La liste de préchargement HSTS contient des domaines intégrés aux navigateurs et accessibles uniquement via HTTPS. Elle élimine même la vulnérabilité de la première requête HTTP.

Exigences de préchargement

1. Certificat SSL valide

2. Rediriger tout HTTP vers HTTPS

3. En-tête HSTS avec :

4. Tous les sous-domaines doivent prendre en charge HTTPS

Soumission à la liste de préchargement

1. Vérifier les exigences : utiliser hstspreload.org pour vérifier

2. Soumettre le domaine : Entrez le domaine à hstspreload.org

3. Attendre l'inclusion : les mises à jour des navigateurs prennent de plusieurs semaines à plusieurs mois

Avertissements du préchargement

La précharge est permanente (en pratique). Le retrait de la liste prend des mois et nécessite des mises à jour du navigateur. Ne préchargez le domaine que si vous êtes certain que tous les sous-domaines prendront en charge HTTPS indéfiniment.

Vérification de HSTS

Outils de développement du navigateur :

1. Ouvrir DevTools → onglet réseau

2. Chargez le site

3. Vérifiez les en-têtes de réponse pour la sécurité strict-transport

Utilisation de curl :
curl -I https://example.com | grep -i strict
Utilisation de DomScan :
curl "https://domscan.net/v1/health?domain=example.com"

# Reports hasHSTS in security details

État du préchargement :

Vérifiez hstspreload.org pour voir si un domaine est préchargé.

Stratégie de déploiement de HSTS

Phase 1 : durée maximale courte

Commencez par une courte durée max-age pour tester :

Strict-Transport-Security: max-age=300

En cas de problème, le navigateur ne conservera le cache que pendant 5 minutes.

Phase 2 : augmenter la durée

Après avoir confirmé que HTTPS fonctionne partout :

Strict-Transport-Security: max-age=86400

Phase 3 : ajouter les sous-domaines

Une fois que tous les sous-domaines prennent en charge HTTPS :

Strict-Transport-Security: max-age=2592000; includeSubDomains

Phase 4 : déploiement complet et préchargement

Après plusieurs mois de fonctionnement stable :

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Soumettez ensuite le domaine à la liste de préchargement.

Problèmes courants liés à HSTS

Sous-domaine sans HTTPS : includeSubDomains rend ce sous-domaine inaccessible Environnements de développement : le HSTS mis en cache depuis la production peut empêcher le développement local En-têtes CDN et proxy : vérifier que l'en-tête HSTS n'est pas supprimé par les intermédiaires Contenu mixte : toutes les ressources doivent utiliser HTTPS. HSTS ne corrige pas les ressources HTTP intégrées

HSTS est essentiel pour tout site Web traitant des données sensibles et fortement recommandé pour tous les sites HTTPS.

Mettez Vos Connaissances en Pratique

Utilisez l'API de DomScan pour vérifier la disponibilité des domaines, la santé et bien d'autres choses.