Forcer le passage de votre site web en https (HSTS)

Les demandes liées à la sécurité web augmentant jour après jour, l'un des nouveaux besoin du marché concerne l'activation de HSTS au niveau de votre site web. Mais vous vous demandez très certainement ce que c'est et comment l'implémenter. Grâce à ce petit tutorial, vous serez à même d'activer du HSTS sur votre site web à tout moment. La procédure décrite est valable pour tous les sites web tournant sur des serveurs Microsoft IIS 7.x +
 
 
Pour rappel, certains sites fonctionnent uniquement en mode HTTPS. C'est pourquoi, le webmaster aura tendance à laisser le site fonctionnel en HTTP en insérant une redirection 301 vers le protocole HTTPS. Mais ce mécanisme pose des problèmes de sécurité, il peut être victime d'une attaque dite de MITM (Man In The Middle).
 
Il est toutefois possible d'éviter cette problématique en indiquant aux navigateurs qu'un site doit obligatoirement être contacté en HTTPS. Ainsi le navigateur transformera automatiquement une URL http:// en https://
 
 
 
Cette manipulation permet la recommandation préliminaire HTTP Strict Transport Security (HSTS). Celle-ci est implémentée à partir de Chrome 4, Firefox 4 et Internet Explorer 11. Par conséquent, l'ajout de HSTS ne crée par d'erreur ou d'avertissement avec les navigateurs incompatibles.
 
Comment cela fonctionne ? Lors d'une connexion HTTPS, le serveur retourne une entête Strict-Transport-Security indique qu'il faut forcer https ainsi que la durée de ce forçage.
 
Dès lors, il vous suffit de configurer votre serveur web favori pour renvoyer cette entête en HTTPS. Ainsi, tous vos utilisateurs sont automatiquement protégés en utilisant https.
 
 
Finalement, sachez qu'il existe un paramètre includeSubDomains qui vous permet de faire porter le HSTS sur tous les sous-domaines de votre domaine.
 

Pré-chargement - Preload

Etant donnée que HSTS s'appuie 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 tient une liste disponible ici. Cette liste sert également de base à Firefox, Safari, IE 11, et Edge.
Pour rejoindre cette liste, votre déclaration HSTS doit contenir la valeur "preload". Cette opération est très facilement réalisable, arès avoir vérifié que votre HSTS est bien activé, rendez-vous sur le site web HSTS Preload.

Redirections HTTP 

En complément au HSTS, qui fonctionne côté client, vous pouvez déployer une redirection HTTP vers HTTPS pour tous vos sites en HTTPS. En utilisant par exemple 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.
 
Pour les sites utilisant le sous-domaine "www", il est nécessaire d'ordonner correctement ces redirections :
Si votre certificat sécurise avec et sans le www, vous devez effectuer les redirections suivantes, dans l'ordre donné :
  • 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 fortement recommandé de sécuriser également le domaine nu comme dans le premier cas.

Implémentation de HSTS sur IIS 7.x et supérieur :

Pour réaliser l'opération, il vous faudra modifier votre fichier web.config en ajoutant les lignes présentes ci-dessous dans la partie <system.webServer>
<!-- Forcing https via HSTS --> 
<rewrite>
    <rules>
      <rule name="HTTP to HTTPS redirect" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
          <add input="{HTTPS}" pattern="off" ignoreCase="true" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
       </rule>
     </rules>
     <outboundRules>
       <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
         <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
         <conditions>
           <add input="{HTTPS}" pattern="on" ignoreCase="true" />
         </conditions>
         <action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
       </rule>
     </outboundRules>
   </rewrite>

Important :

Vous ne pouvez installer ces règles dans votre web.config que si votre serveur web Microsoft IIS a bien le composant "URL Rewrite 2.x" installé. Si ce n'est pas le cas, il vous faudra d'abord le télécharger (par exemple via le composant "Web Platform" livré gratuitement par Microsoft. Une fois installé relancez votre site web et testez le résultat sur https://hstspreload.org
 
Sources : 
Retrouvez plus d'informations au sujet de "HSTS in IIS" dans un très bon article en anglais à l'adresse suivante : https://scotthelme.co.uk/hsts-the-missing-link-in-tls/