Ce que protège HTTPS

La poignée de main TLS

Avant le moindre octet de page web, client et serveur mènent une négociation appelée poignée de main (handshake). Elle dure quelques millisecondes et accomplit beaucoup.

Le déroulement, en version 1.3

Client                                (serveur)
  |--- ClientHello + key_share -------->|
  |<-- ServerHello + key_share ---------|
  |<-- Certificate ---------------------|
  |<-- CertificateVerify ---------------|
  |<-- Finished ------------------------|
  |--- Finished ----------------------->|
  |===== (donnees applicatives) =======>|

Étape par étape :

  • ClientHello : le navigateur annonce les versions et algorithmes qu'il accepte, et joint déjà sa part d'échange de clés ;
  • ServerHello : le serveur choisit parmi les propositions et joint sa propre part. À ce point, les deux peuvent déjà calculer la clé de session par Diffie-Hellman ;
  • Certificate : le serveur présente son certificat, qui lie son nom de domaine à sa clé publique ;
  • CertificateVerify : il signe l'échange avec sa clé privée. C'est l'étape décisive — elle prouve qu'il possède réellement la clé privée du certificat, et non une simple copie de celui-ci ;
  • Finished : chacun confirme que tout le dialogue a été reçu sans altération.

Pourquoi CertificateVerify est indispensable

Un certificat est un document public. N'importe qui peut copier celui d'une banque. Sans la signature de CertificateVerify, un imposteur présenterait ce certificat volé et se ferait passer pour elle.

C'est la signature qui fait la différence, car elle exige la clé privée — celle qui ne quitte jamais le serveur. Tu retrouves ici, appliquée, la parade contre l'homme du milieu.

Le gain de la version 1.3

TLS 1.2 exigeait deux allers-retours avant de transmettre la moindre donnée. TLS 1.3 n'en demande plus qu'un, en envoyant la part d'échange de clés dès le premier message.

La version 1.3 a aussi fait le ménage : les algorithmes anciens ou fragiles ont été retirés du standard plutôt que laissés en option. Une option dangereuse finit toujours par être activée quelque part.