HTTPS fait de plus en plus parler de lui, notamment depuis la faille Heartbleed largement médiatisée en 2014.
Il fût un temps où HTTPS était réservé aux transactions très sensibles, comme les transactions bancaires.

On considère aujourd’hui qu’HTTPS est nécessaire dès lors qu’un utilisateur est authentifié sur un site internet, ce afin de protéger sa session web et ses identifiants de connexion.

HTTPS Lock

Qu’est-ce qu’HTTPS?

HTTPS n’est rien d’autre que HTTP, le protocole internet de base permettant d’échanger des données entre un client (navigateur web) et un serveur web auquel on rajoute une couche de sécurité.
En effet, HTTP n’est pas un protocole sécurisé : il n’a été conçu que dans un but fonctionnel, sans prise en compte de contraintes de sécurité.

On ajoute donc à HTTP une couche de sécurité, ou plus exactement on vient encapsuler HTTP dans une connexion sécurisée.

HTTPS permet d’atteindre trois objectifs :

  1. Authentifier le serveur web, afin que l’utilisateur puisse être certain que le site sur lequel il navigue est bien celui qu’il pense.
  2. Confidentialité des données : HTTPS fait en sorte que les données ne soient pas déchiffrables par une tierce personne.
  3. Intégrité des données : HTTPS garantit que les données n’ont pas été modifiées en cours de route sur le réseau.

Les autorités de certification

Les autorités de certification sont les établissement délivrant les certificats SSL. Ces organismes sont connus par les navigateurs web, qui acceptent alors sans hésitation les certificats valides.
Un certificat peut être créé par n’importe qui, mais s’il n’est pas délivré par un organisme reconnu, les navigateurs web afficheront une alerte de sécurité.

Exemple d’autorité de certification : Thawte, Go Daddy, Global Sign, DigiCert…

SSL Handshake

Le SSL Handshake est le processus durant lequel le serveur web et le navigateur vont se mettre d’accord sur le protocole à utiliser (SSL, TLS dans leurs différentes versions), sur la suite de chiffrage à utiliser et enfin sur la clé de session qui sera utilisée dans les communications, une fois le handshake terminé.

Sans rentrer dans les détails les plus fins, le handshake se passe ainsi :

  1. Le navigateur web et le serveur se mettent d’accord sur le protocole à utiliser (SSL X, TLS X)
  2. Le navigateur web vérifie l’authenticité du serveur (certificate authority)
  3. Le navigateur web crée une clé de session et la crypte avec la clé publique du serveur web
  4. Le serveur web décrypte le message précédent avec sa clé privée
  5. Le navigateur et le serveur communiquent en utilisant la clé de session créée durant le processus de handshake pour la suite de la conversation (échange des données).

Les suites de chiffrage (cipher suites)

Différents niveaux de chiffrement existent au sein d’HTTPS.
Comment mentionné au début de l’article, HTTPS est l’ajout de sécurité au protocole HTTP, via l’utilisation de SSL ou TLS.
Ces deux protocoles de sécurité existent différentes versions, certaines étant considérées comme obsolètes. SSL2 est obsolète, SSLV3 commence sérieusement à mourir après l’apparition de la vulnérabilité “POODLE” et peut être considéré comme obsolète également.
A utiliser donc : TLS v1.0, v1.1, v1.2.

Heartbleed bug illustration

Par ailleurs les protocoles SSL et TLS utilisent différents algorithmes de cryptage. Les algorithmes utilisés lors d’une communication dépendent de ce que le serveur et le client acceptent.
Au fil du temps, certains de ces algorithmes deviennent trop faibles, et ne doivent donc plus être utilisés :
On notera par exemple les clés de chiffrement inférieures à 128 bits, et les algorithmes RC4, à proscrire.

Il convient donc de veiller à maintenir une configuration à jour des systèmes informatiques et en particulier la configuration HTTPS des serveurs web.

Exemple de suite de chiffrage

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

Signification de la suite de chiffrage (cipher string)

ECDHE : key exchange algorithm
ECDSA : authentication
AES_128_CBC : bulk cipher used for message encryption
SHA : MAC algorithm

Mettre en place HTTPS sur un serveur

La mise en place d’HTTPS sur un serveur web est relativement simple, et très bien documentée pour les différents serveurs web du marché.

Les grandes étapes de la mise en place sont les suivantes :

  • commande d’un certificat SSL auprès d’une autorité de certification (si l’on souhaite que le certificat soit utilisable sur Internet et reconnu comme valide)
  • installation du certificat SSL sur le serveur web (fichiers à copier)
  • configuration du serveur web

La configuration du serveur web sur les aspects HTTPS comprend notamment :

  • binding adresse IP-port / domaine du certificat
  • définition des protocoles autorisés (TLS/SSL)
  • choix des algorithmes et niveaux de chiffrement acceptés

Vous trouverez ci-dessous les liens vers les pages détaillant l’installation d’SSL sur les trois serveurs web les plus utilisés :

Apache : https://wiki.apache.org/httpd/SSL
IIS : http://www.iis.net/learn/manage/configuring-security/how-to-set-up-ssl-on-iis
Nginx : http://nginx.org/en/docs/http/configuring_https_servers.html

Mozilla a récemment publié une page permettant de générer une configuration sûre d’HTTPS :

Générateur de configuration HTTPS Mozilla

Maintenir HTTPS

HTTPS n’est pas l’affaire d’une fois. Une fois installé, il faut penser à maintenir l’installation d’HTTPS.
Nous l’avons vu récemment avec la faille heartbleed affectant certaines versions d’openSSL, les mises à jour du système permettent d’éviter certaines failles affectant directement l’utilisation d’HTTPS.

Par ailleurs il convient de se tenir informé du niveau de sécurité des différents protocoles SSL/TLS et des suites de chiffrement, certains devront être désactivés si considérés comme faibles.

Dernier point des plus importants et évident mais parfois oublié : un certificat SSL expire.

Une fois la date limite passée, le certificat n’est plus valide et les navigateurs web affichent des alertes de sécurité très dissuasives, incitant les utilisateurs à fuir le site internet en question. Une grosse perturbation pour le service!