HTTPS : la version chiffrée du protocole HTTP
Mise en situation
HTTP est un protocole "en clair", c'est à dire que les requêtes et réponses qui sont échangées ne sont pas chiffrées. N'importe qui sur le réseau peut ainsi lire les données échangées. Cela inclut par exemple le mot de passe lorsque l'on se connecte à un compte en ligne, ou par exemple les relevés bancaires que l'on consulte sur le site de sa banque.
HTTPS est la version chiffrée de HTTP qui permet de résoudre ce problème. C'est un protocole qui vient s'ajouter par dessus HTTP pour s'assurer que seul le client et le serveur pourront avoir accès aux données échangées.
Définition : HTTPS et TLS
HTTPS (pour HTTP Secure) est une extension de HTTP qui permet une communication sécurisée.
Pour cela il encapsule les requêtes HTTP dans un protocole appelé TLS (pour Transport Layer Security
) qui permet de réaliser des échanges chiffrés.
TLS est simplement le protocole de mise en place et d'utilisation du canal de communication chiffré, l'algorithme de chiffrement à utiliser est laissé au choix des clients et serveurs HTTP . On peut parfois trouver le terme SSL, qui est l'ancêtre de TLS (et qu'il ne faut plus utiliser aujourd'hui).
Fonctionnement général de HTTPS
À chaque initialisation de connexion, avant d'envoyer la première requête HTTP, le client va ouvrir une communication TLS (on parle de session TLS) avec le serveur. Dans cette phase préalable, le navigateur et le serveur vont définir les algorithmes et clefs de chiffrement à utiliser et le serveur va envoyer un certificat.
Certificat
Le certificat est à la base du fonctionnement de HTTPS, il permet de certifier au client web que le serveur qui répond à la requête est bien le serveur souhaité. Par exemple si on se rend sur le site de sa banque (disons www.mabanque.fr), on veut s'assurer que c'est bien le serveur de www.mabanque.fr qui va nous répondre, et pas un serveur qui chercherait à usurper son identité. Pour cela le serveur va devoir présenter un certificat au client, permettant d'attester que l'on communique bien avec le serveur de www.mabanque.fr.
Fondamental :
Tout site web qui veut rendre possible l'accès en HTTPS doit se procurer un certificat lié à son nom de domaine. Sans cela, HTTPS ne fonctionnera pas, et un message d'avertissement s'affichera dans le navigateur pour indiquer que le site n'est pas digne de confiance pour établir un échangé sécurisé.
Méthode : Comment se procurer un certificat ?
Il suffit de le créer, c'est à la portée de n'importe quel administrateur système.
Fondamental : Comment s'assurer que quelqu'un ne crée pas un certificat à la place d'une autre personne ?
Grâce à la chaîne de confiance.
Exemple : Chaîne de confiance
Imaginons que je sois Ali et que, parce que j'ai un peu d'argent de côté, je suis d'accord pour en prêter à un ami dans le besoin. Il se trouve que je n'ai pas d'ami ayant besoin d'argent, mais un dénommé Baptiste se présente et me demande si je peux lui prêter un peu d'argent pour lancer son entreprise de cordonnerie. Je n'ai rien contre, mais je ne connaît pas vraiment Baptiste, je ne sais pas vraiment si je peux lui faire confiance. Il se trouve cependant que je connais très bien mon amie Charline, en qui j'ai une confiance totale. Charline connaît très bien Baptiste et m'assure qu'elle a complètement confiance en lui.
C'est ainsi que se forme une chaîne de confiance : j'ai confiance en Charline qui a confiance en Baptiste, j'ai donc confiance en Baptiste. Il pourrait y avoir d'autres personnes dans la chaîne, cela reviendrait au même. La seule condition essentielle est de n'accorder sa confiance qu'à des personnes dont on sait qu'elles ne vont pas accorder elles-mêmes leur confiance à la légère. Si toutes les personnes accordent leur confiance avec la même exigence, alors une chaîne de confiance peut fonctionner.
Autorité de certification et chaîne de confiance
Le fonctionnement est le même pour les navigateurs et les certificats. Chaque navigateur ne fera confiance, de base, qu'à une poignée de certificats (quelques dizaines). Ce sont généralement les certificats de très grandes entreprises, d'états, ou d'entreprises spécialisées dans la création de certificat. Pour intégrer cette liste de certificat "de confiance", les entités ont eu a passer des examens approfondis pour valider que le navigateur peut leur accorder confiance.
Les certificats fonctionnent ensuite comme une sorte de "preuve de confiance". Une personne qui possède un certificat peut créer un autre certificat pour une autre personne, et "lier" les certificats (on dit que le premier certificat sert à signer le second) entre eux.
Ainsi, lorsqu'un serveur présente un certificat qui ne fait pas partie de la liste connue (ce qui est généralement le cas), le navigateur va vérifier si il peut établir une chaîne de confiance entre le certificat reçu et un des certificats de confiance. Imaginons que le navigateur fasse confiance en un certificat de l'entreprise A. Ensuite l'entreprise A a créé un certificat pour l'entreprise B, qui est un hébergeur de site Web, en laquelle elle a confiance, et elle a signé le certificat de B avec son certificat. Enfin, l'hébergeur B va créer des certificats pour tout ses clients qui ont un site web, et signer les nouveaux certificats. Le navigateur aura confiance dans ces certificats grâce à la chaîne de confiance établi entre le certificat reçu et le certificat de l'entreprise A, en passant par celui de l'entreprise B.
Introduisons maintenant rapidement les termes techniques utilisés dans ce contexte.
Une entreprise (ou toute autre entité en fait) qui produit des certificats pour d'autres entités s'appelle une Autorité de Certification (que l'on abrège AC, ou plus couramment CA en anglais).
Lorsqu'une autorité de certification émet un certificat pour un tiers, on dit qu'elle signe le certificat, ce qui créé un lien dans la chaîne de confiance.
La chaîne de liens entre des certificats s'appelle la chaîne de confiance, le terme anglais trust chain étant le plus souvent utilisé.
Le certificat étant "en haut" de la hiérarchie dans une chaine de confiance se nomme le certificat racine (ou root certificate). On parle aussi d'autorité de certification racine (root CA).
Exemple :
Dans le cas du site www.picasoft.net
, on peut constater que la chaîne de confiance est la suivante.
Picasoft a un certificat fourni par l'autorité de certification Let's Encrypt (qui a un certificat nommé Let's Encrypt Authority X3
). Let's Encrypt est à son tour certifiée par Digital Signature Trust, qui a un certificat DST Root CA X3
. Ce dernier certificat se trouve, lui, par défaut dans les navigateurs les plus courants (Firefox, Chrome, etc.).
À retenir
HTTPS est une extension de HTTP qui permet de garantir la confidentialité des échanges entre le client et le serveur.
Les certificats sont à la base du fonctionnement de HTTPS, et leur utilisation se base sur une chaîne de confiance.