Activer l'en-tête HSTS sur Apache pour protéger son site web

Il y a quelques jours, j'ai découvert, un peu par hasard, securityheaders, un site permettant de tester un peu le sécurité de son site internet, du moins en ce qui concerne les mécanismes contenus dans les en-têtes de trame HTTP. Cela fait maintenant un moment que JusteGeek tourne en HTTPS puisque j'ai effectué la migration en juin 2015 et confiant en moi même,  je me suis dis que j'allais le tester pour voir un peu ce que cela donne. J'ai donc soumis Justegeek.fr à l'examen du site securityheaders et j'ai eu une drôle de surprise, puisque j'ai obtenu la note de... F soit la pire note du site il me semble... En même temps, je ne suis pas un professionnel de la sécurité et j'apprends au fur et à mesure donc cela ne me choque pas tant que ça (mais c'est vexant quand même 😆 ). J'ai donc analysé tout cela et procédé à quelques modifications côté serveur. Ce billet va porter sur l'un des changements effectués concernant le mécanisme HSTS sur Apache. D'autres billets paraîtront dans les prochains jours sur d'autres aspects, le but étant de transformer cette note F en une bien meilleure note (le A si possible^^).

La note initiale de JusteGeek.fr sur Security Headers : F

La note initiale de JusteGeek.fr sur Security Headers : F

 

HTTP Strict Transport Security

HTTP Strict Transport Security, plus connu sous le sigle HSTS est un mécanisme qui demande au client (le navigateur) de remplacer tous les liens non sécurisés par des liens sécurisés. Ce mécanisme permet donc de s'assurer que seules des requêtes HTTPS seront utilisées au cours de la navigation sur le site, quels que soient les liens contenus dans la page Web. Ce mécanisme peut également s'appliquer aux sous-domaines si l'on précise la directive includeSubDomains dans la configuration. Ainsi, les sous domaines seront eux aussi affichés en HTTPS.

 

Configurer HSTS sur Apache

Pour activer le protocole HSTS sur Apache dans les en-têtes de trames, le plus simple est de modifier la configuration du serveur Apache. Ainsi, si le serveur héberge plusieurs sites, tous bénéficieront de cette directive. Pour cela, il convient d'éditer le fichier /etc/apache2/conf-available/security.conf pour ajouter la ligne ci-dessous :

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

Une fois que c'est fait, rechargez simplement la configuration d'Apache :

service apache2 reload

 

Si vous n'avez pas le main sur la configuration Apache (si par exemple vous utilisez un hébergement mutualisé), vous pouvez activer HSTS grâce au fichier .htaccess à la racine de votre site. Il vous suffira d'y ajouter la ligne suivante dans la section mod_headers :

<IfModule mod_headers.c>

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

</IfModule>

 

HSTS Preloading

Comme expliqué plus haut dans ce billet, implémenter le protocole HSTS permet de garantir que, lors de la session, tous les liens utiliseront HTTPS. C'est très bien, mais est-ce suffisant à 100% ? Non ! Car il faut aussi protéger le début de la session. En effet, le premier échange ne sera pas effectué en HTTPS, puisque le client ne sait pas encore que le site web utilise HSTS. C'est là qu'intervient la notion de HSTS preloading. L'idée ici est de faire inscrire son domaine sur un liste internationale utilisée par les navigateurs internet. Ainsi, les navigateurs savent qu'ils devront utiliser HTTPS dès le début de la session.

Pour activer le HSTS preloading, il est important de bien préciser la directive preload lorsque l'on met en place HSTS. Ensuite, il convient de s'inscrire sur la liste officielle pour que cela soit effectif. Pour tester son éligibilité et demande son enregistrement sur la liste HSTS preloading, cela se passe ici.

Bon, en toute transparence, je ne l'ai pas encore fait puisque je dois d'abord retravailler sur les mécanisme de redirection afin d'être éligible au préchargement HSTS.

 

Conclusion

Et bien voilà. C'est terminé. L'effort pour la mise en oeuvre du mécanisme HSTS sur Apache est donc relativement faible et cela permet d'améliorer un peu la sécurité de son site internet. Pour ma part, cela m'a permis de passer JusteGeek.fr au grade D sur le site SecurityHeaders !

JusteGeek.fr passé de F à D grâce à la mise en place de HSTS sur Apache

JusteGeek.fr passé de F à D grâce à la mise en place de HSTS

Bien sûr, je ne me suis pas arrêté là. Je vous présenterai dans les prochains jours les autres mécanismes que j'ai mis en place et contribuant à l'amélioration de la sécurité du site.

 

Sandstorm

Sandstorm

Ingénieur Systèmes passionné d'informatique et de High-Tech, Sandstorm a créé JusteGeek.fr en 2013. Il aime les geekeries en tout genre.

Vous aimerez aussi...

4 réponses

  1. Mad dit :

    Pour passer en A , il faut encore désactiver les chaînes de chiffrement obsolète. Et activer une protection des iframes

    • Sandstorm Sandstorm dit :

      Salut ! Merci pour ton commentaire ! Ne spoil pas ma ligne éditoriale 😀 : comme précisé à la fin du billet, on y va étape par étape. Un second tuto est paru ce matin sur l'en-tête X-FRAME-OPTIONS et les autres tutos sont à venir ! L'objectif bien sûr étant le A 🙂

  2. Petit oubli dans le texte... "Si vous n'avez pas le main sur la configuration Apache (si par exemple vous utilisez un hébergement mutualisé), vous pouvez activer HSTS grâce au fichier .htaccess à la racine de votre site. Il vous suffira d'y ajouter la ligne ci-dessus."... et il manque la ligne pour le fichier .htaccess !

    Merci de compléter votre article et bonne continuation sur la voie de la sécurité 😉

    • Sandstorm Sandstorm dit :

      Bonjour Eric,
      Merci pour le commentaire.
      Euh non, il ne manque pas la ligne puisque je renvoie à la ligne "CI-DESSUS"...
      Mais effectivement, j'aurais pu la remettre en précisant que cela doit être dans la section " < IfModule mod_headers.c > ". Je vais donc éditer mon article en ce sens 😉
      ++

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.