HTTP Strict Transport Security (HSTS) protège les sites web contre les attaques de downgrade de protocole et le détournement de cookies. C'est un mécanisme de sécurité essentiel.
Quand un navigateur visite un site avec HSTS activé, il se souvient de toujours utiliser HTTPS, éliminant la fenêtre de vulnérabilité de la première connexion.
Qu'est-ce que HSTS
HSTS est une politique de sécurité web déclarée via l'en-tête de réponse HTTP Strict-Transport-Security.
Comment ça fonctionne
- Le navigateur reçoit l'en-tête HSTS lors d'une connexion HTTPS
- Il enregistre que ce domaine ne doit être accédé que via HTTPS
- Les requêtes HTTP suivantes sont automatiquement mises à niveau vers HTTPS
- Le navigateur refuse de se connecter en HTTP, même si l'utilisateur le demande
Syntaxe de l'en-tête
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Directives :
max-age: durée en secondes de mémorisation de la politiqueincludeSubDomains: applique la politique à tous les sous-domainespreload: indique l'intention de soumettre à la liste de préchargement
Pourquoi HSTS Est Critique
HSTS adresse des faiblesses fondamentales dans le modèle de sécurité HTTPS standard.
Le problème de la première connexion
Sans HSTS, la première visite d'un site se fait souvent via HTTP :
- Les utilisateurs tapent des noms de domaine sans préfixes de protocole
- Cette requête HTTP est interceptable
- Un attaquant peut exécuter une attaque SSL stripping
Attaques SSL stripping
L'attaque fonctionne ainsi :
- L'attaquant intercepte la requête HTTP initiale
- Au lieu de rediriger vers HTTPS, il maintient une connexion HTTP avec la victime
- Il communique en HTTPS avec le serveur légitime
- La victime pense être sur le vrai site, mais en HTTP non chiffré
HSTS prévient cela car le navigateur n'enverra jamais de requêtes HTTP après avoir reçu l'en-tête.
Détournement de cookies
Sans HSTS, les cookies peuvent être envoyés via des connexions HTTP non sécurisées, même si le flag Secure n'est pas défini. HSTS assure que les cookies ne sont envoyés que via HTTPS.
Comment Implémenter HSTS
L'implémentation HSTS nécessite une planification soigneuse pour éviter de verrouiller les utilisateurs.
Prérequis
Avant d'activer HSTS :
- Tout votre site doit fonctionner via HTTPS
- Toutes les ressources (images, scripts, CSS) doivent être en HTTPS
- Tous les sous-domaines inclus doivent supporter HTTPS
- Testez extensivement avant d'activer
Déploiement progressif
Étape 1 : Test avec un court max-age
Strict-Transport-Security: max-age=300
5 minutes permettent de détecter les problèmes sans conséquences durables.
Étape 2 : Augmentation progressive
Strict-Transport-Security: max-age=3600 # 1 heure
Strict-Transport-Security: max-age=86400 # 1 jour
Strict-Transport-Security: max-age=604800 # 1 semaine
Strict-Transport-Security: max-age=31536000 # 1 an
Étape 3 : Ajout de includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains
Configuration Nginx
server {
listen 443 ssl http2;
server_name example.com;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Reste de la configuration SSL...
}
# Redirection HTTP vers HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
Configuration Apache
<VirtualHost *:443>
ServerName example.com
# HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Reste de la configuration SSL...
</VirtualHost>
# Redirection HTTP vers HTTPS
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
Préchargement HSTS
Le préchargement HSTS intègre votre domaine dans une liste incluse dans les navigateurs, protégeant même la première connexion.
Exigences pour le préchargement
- Certificat SSL valide
- Redirection de HTTP vers HTTPS sur le même hôte
- Tous les sous-domaines servis en HTTPS
- En-tête HSTS avec :
max-aged'au moins 31536000 secondes (1 an)- Directive
includeSubDomains - Directive
preload
En-tête pour le préchargement
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Soumission
Soumettez votre domaine sur hstspreload.org après avoir vérifié que toutes les exigences sont remplies.
Bonnes Pratiques et Précautions
Implémentez HSTS en toute sécurité avec ces recommandations.
À faire
- Commencer avec de courtes valeurs max-age
- Tester minutieusement avant d'activer includeSubDomains
- Documenter votre configuration HSTS et les sous-domaines couverts
- Avoir des procédures de renouvellement de certificat robustes
- Surveiller les expirations de certificat de près
À éviter
- Activer HSTS sans avoir testé HTTPS sur tout le site
- Utiliser includeSubDomains sans vérifier tous les sous-domaines
- Activer le préchargement sans comprendre les implications
- Ignorer les alertes d'expiration de certificat
Impact des certificats expirés avec HSTS
Avec HSTS activé, un certificat expiré signifie une indisponibilité complète :
- Les utilisateurs ne peuvent pas contourner l'avertissement de certificat
- Le site est totalement inaccessible
- La seule solution est de renouveler le certificat
Vérification de la configuration
# Vérifier l'en-tête HSTS
curl -I https://example.com | grep -i strict
# Test complet avec SSL Labs
# https://www.ssllabs.com/ssltest/
Conclusion
HSTS est un mécanisme de sécurité critique qui protège contre les attaques de downgrade. Une implémentation correcte nécessite une planification soigneuse : tests HTTPS complets, déploiement graduel et considération réfléchie du préchargement.
Les risques de mauvaise implémentation sont significatifs car une mauvaise configuration peut rendre votre site inaccessible. Suivez une approche méthodique.