Strict-Transport-Security (HSTS)
Demander au navigateur d’utiliser systématiquement HTTPS pour accéder à un site.
Comprendre HSTS
Strict-Transport-Security, souvent abrégé en HSTS, est une règle de sécurité qui indique au navigateur : « pour ce site, utilise toujours HTTPS ».
Une connexion HTTPS chiffre les échanges entre le navigateur et le site. Cela permet notamment d’empêcher qu’une personne placée entre les deux puisse facilement lire ou modifier les informations transmises.
Pourquoi HSTS est-il important ?
Lorsqu’un utilisateur saisit simplement :
example.com
le navigateur peut commencer par tenter une connexion en HTTP avant d’être redirigé vers HTTPS.
Pendant cette première étape, la connexion n’est pas encore protégée par le chiffrement HTTPS. Un attaquant présent sur le réseau pourrait alors tenter d’intercepter ou de modifier cette communication.
HSTS demande au navigateur de retenir que ce domaine doit être utilisé uniquement en HTTPS.
Lors des visites suivantes, le navigateur peut donc utiliser directement HTTPS sans commencer par une connexion HTTP non sécurisée.
Configurer HSTS
Le serveur transmet HSTS grâce à l’en-tête HTTP :
Strict-Transport-Security: max-age=31536000
Dans cet exemple, le navigateur doit retenir pendant 31 536 000 secondes, soit environ un an, que le site doit toujours être utilisé en HTTPS.
Pendant cette période, si l’utilisateur tente d’accéder au site en HTTP, le navigateur peut automatiquement remplacer l’adresse par sa version HTTPS avant même d’envoyer la requête.
Les principaux paramètres
max-age
Définit pendant combien de temps le navigateur doit mémoriser que le site doit être utilisé uniquement en HTTPS.
includeSubDomains
Étend la règle HSTS à tous les sous-domaines concernés. Tous ces sous-domaines doivent donc fonctionner correctement en HTTPS.
preload
Indique que le domaine est destiné à utiliser le mécanisme de préchargement HSTS. Celui-ci permet à certains navigateurs de connaître la règle HTTPS avant même la première visite.
Exemple plus complet
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Cette configuration demande au navigateur :
- d’utiliser HTTPS pendant un an ;
- d’appliquer également cette règle aux sous-domaines ;
- et indique que le domaine est destiné à utiliser le préchargement HSTS.
Activer HSTS sans créer de problème
HSTS est une protection importante, mais le navigateur prend réellement la règle au sérieux une fois qu’il l’a enregistrée.
Il faut donc s’assurer que le site fonctionne correctement en HTTPS avant d’imposer cette règle pendant une longue durée.
Attention à
includeSubDomains
Lorsque
includeSubDomains
est activé,
la règle ne concerne plus seulement
le domaine principal.
Par exemple, une politique appliquée à :
example.com
peut également concerner :
app.example.com
mail.example.com
api.example.com
Si l’un de ces sous-domaines ne fonctionne pas correctement en HTTPS, le navigateur pourra refuser de revenir vers une connexion HTTP tant que la règle HSTS reste active.
Et le préchargement HSTS ?
Le préchargement permet à certains navigateurs de connaître à l’avance les domaines qui doivent obligatoirement utiliser HTTPS.
Cela permet de protéger dès la toute première connexion, sans attendre que le navigateur ait déjà reçu un en-tête HSTS.
En contrepartie, cette configuration doit être préparée avec soin : l’ensemble du domaine concerné doit être capable de fonctionner durablement en HTTPS.
Que se passe-t-il lorsque
max-age
expire ?
Lorsque la durée indiquée arrive à expiration, le navigateur peut oublier la règle HSTS s’il ne l’a pas reçue à nouveau entre-temps.
En pratique, un site correctement configuré renvoie généralement l’en-tête HSTS lors des visites HTTPS, ce qui renouvelle régulièrement la durée de validité de la règle.
Bonnes pratiques et limites
Bonnes pratiques
- Utiliser HSTS sur un site destiné à fonctionner exclusivement en HTTPS.
- Vérifier que le site fonctionne correctement en HTTPS avant d’activer une durée longue.
-
Utiliser un
max-agesuffisamment long lorsque la configuration HTTPS est stable. -
Activer
includeSubDomainsuniquement lorsque tous les sous-domaines concernés utilisent correctement HTTPS. -
Vérifier soigneusement
l’ensemble de la configuration
avant d’utiliser
preload. - Continuer à rediriger correctement les accès HTTP vers HTTPS, même lorsque HSTS est activé.
Ce que HSTS ne remplace pas
HSTS est une protection essentielle pour imposer HTTPS, mais il ne sécurise pas à lui seul l’ensemble du site.
Il ne remplace notamment pas :
- un certificat TLS valide ;
- une configuration HTTPS correcte ;
- la sécurité du code ;
- les mises à jour du site et de ses dépendances ;
- les autres mécanismes de sécurité nécessaires.
HSTS doit donc être considéré comme une protection à mettre en place sur un site fonctionnant en HTTPS, afin d’éviter qu’un navigateur utilise accidentellement une connexion HTTP non sécurisée.