Menu
picture of tbs certificates
picture of tbs certificates
Les certificats
Notre gamme
Partenaires
Support
Numéro vert
Focus
Autres activités


Forcer HTTPS avec Strict Transport Security (HSTS)

Certains sites sont conçus pour fonctionner uniquement en mode HTTPS. Dans ce cas, le webmaster laisse parfois le site fonctionnel en HTTP avec une redirection vers HTTPS. Mais ce mécanisme n'est pas sur, il peut être victime d'une attaque MITM.

Pour éviter cela, il est possible d'indiquer aux navigateurs qu'un site doit obligatoirement être contacté en HTTPS. Dans ce cas le navigateur transforme tout seul une URL http:// en https://

C'est ce que permet la recommandation préliminaire HTTP Strict Transport Security (HSTS) qui est implémentée, entres autres, à partir de Chrome 4, Firefox 4 et Internet Explorer 11. L'ajout de HSTS ne crée par d'erreur ou d'avertissement avec les navigateurs incompatibles.

Le fonctionnement est simple: lors d'une connexion HTTPS, le serveur retourne une entête Strict-Transport-Security indiquant qu'il faut forcer https, et pendant combien de temps. Il suffit de configurer votre serveur web favori pour renvoyer cette entête en HTTPS, et voilà tous vos utilisateurs automatiquement protégés et utilisant https.

Vous trouvez la documentation pour la plupart des serveurs sur http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security

Il existe un paramètre includeSubDomains qui vous permet de faire porter le HSTS sur tous les sous-domaines de votre domaine.

Pré-chargement

HSTS s'appuyant sur une première visite en HTTPS, plusieurs navigateurs ont ajouté une base de pré-chargement afin de se connecter automatiquement en HTTPS lors de la première visite.

Chrome/Chromium maintient une liste joignable sur simple demande. Cette liste sert également de base à Firefox, Safari, IE 11, et Edge.

Pour rejoindre cette liste, il est nécessaire que votre déclaration HSTS contienne la valeur "preload".

Redirections HTTP

En complément de HSTS, qui fonctionne côté client, pour tous vos sites en HTTPS, vous pouvez déployer des redirections HTTP vers HTTPS. Vous pouvez par exemple utiliser une redirection 301 pour signifier qu'il faut toujours accéder à la ressource en HTTPS. Dès que l'utilisateur aura accédé à une ressource en HTTPS, le header HSTS sera lu par le client/navigateur qui l'appliquera à tout le site.

Dans le cas des sites utilisant le sous-domaine "www", il est important d'ordonner correctement ses redirections :

Si votre certificat sécurise avec et sans le www, vous devez effectuer les redirections suivantes, dans l'ordre suivant :

  • http://domaine.tld => https://domaine.tld
  • http://www.domaine.tld => https://www.domaine.tld
  • https://domaine.tld => https://www.domaine.tld

De cette manière à la fois le domaine nu et le domaine avec "www" est protégé par HSTS.

Dans le cas où votre certificat ne protège que le "www", vous devez effectuer les redirections suivantes :

  • http://domaine.tld => https://www.domaine.tld
  • http://www.domaine.tld => https://www.domaine.tld

Il est toutefois à noter qu'il est fortement recommandé de sécuriser également le domaine nu comme dans le premier cas.

Mise en place

Apache

Pour Apache, il suffit de faire :

# charger le module mod_headers.so si ce n'est pas déjà fait
LoadModule headers_module modules/mod_headers.so


# forcer les connexions en https pendant 180 jours
Header always set Strict-Transport-Security "max-age=15552001; includeSubDomains; preload"

Redirections HTTP

Pour rediriger votre traffic HTTP vers HTTPS, ajoutez à votre virtual host HTTP l'instruction suivante :

Redirect permanent /secure https://domaine.tld

Nginx

Pour nginx, il suffit de faire :

# forcer les connexions en https pendant 180 jours
add_header Strict-Transport-Security "max-age=15552001; includeSubDomains; preload";

Redirections HTTP

Pour rediriger le traffic HTTP vers HTTPS, ajouter au bloc server de votre site HTTP la ligne suivante :

return 301 https://$host$request_uri;

Si votre site gère le HTTP et le HTTPS, vous pouvez ajouter le bloc conditionnel suivant à votre bloc server :

if ($scheme = http) { return 301 https://$server_name$request_uri; }

Lighthttpd

Ajoutez le header suivant:

setenv.add-response-header = (
"Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload"

Redirections HTTP

Pour rediriger, le traffic HTTP vers HTTPS, vous devez tout d'abord avoir le module redirect activé :

server.modules += ( "mod_redirect" )

Configurez ensuite votre socket http :

$SERVER["socket"] == ":80" { $HTTP["host"] =~ "domaine.tld" { url.redirect = ( "^/(.*)" => "https://domaine.tld/$1" ) server.name = "domaine.tld" } }

Microsoft IIS

Vous pouvez consulter notre documentation sur HSTS sur IIS.

Liens utiles