Comment HTTPS et TLS fonctionnent vraiment : guide pratique
Vous avez probablement déjà vu l'icône de cadenas dans votre navigateur et vous savez qu'elle signifie « sécurisé ». Mais que se passe-t-il réellement lorsque vous visitez un site HTTPS ? Comment votre navigateur et le serveur s'accordent-ils sur les clés de chiffrement sans que personne ne puisse écouter ? Si vous êtes développeur, comprendre TLS est essentiel pour déboguer les problèmes de connexion, configurer des serveurs et créer des applications sécurisées.
Ce guide décompose HTTPS et TLS en termes pratiques. Nous couvrirons la poignée de main (handshake), les certificats, le chiffrement, et vous donnerons des étapes concrètes pour sécuriser votre propre site.
Qu'est-ce que TLS et quel est son lien avec HTTPS ?
TLS (Transport Layer Security) est un protocole cryptographique qui assure une communication sécurisée sur un réseau. HTTPS n'est que HTTP superposé à TLS. Lorsque vous voyez https://, cela signifie que le trafic HTTP est chiffré à l'aide de TLS.
TLS garantit trois choses :
- Confidentialité : Les données sont chiffrées afin que les oreilles indiscrètes ne puissent pas les lire.
- Intégrité : Les données ne peuvent pas être modifiées en transit sans être détectées.
- Authentification : Le serveur prouve son identité via des certificats.
Sans TLS, toutes les données que vous envoyez (mots de passe, cartes de crédit, messages) voyagent en clair et peuvent être interceptées.
La poignée de main TLS : étape par étape
Avant tout échange de données chiffrées, le client et le serveur effectuent une poignée de main pour s'accorder sur les algorithmes de chiffrement et établir des clés partagées. Voici une version simplifiée d'une poignée de main TLS 1.3 (la norme moderne) :
- Client Hello : Le client envoie une liste des suites de chiffrement prises en charge, une valeur aléatoire et d'autres paramètres.
- Server Hello : Le serveur choisit une suite de chiffrement, envoie sa propre valeur aléatoire et fournit son certificat.
- Échange de clés : À l'aide de la clé publique du certificat, le client et le serveur dérivent un secret partagé (via Diffie-Hellman).
- Finished : Les deux parties vérifient la poignée de main et commencent à chiffrer les données applicatives.
Dans TLS 1.3, ce processus ne prend qu'un seul aller-retour, ce qui le rend plus rapide que les versions antérieures.
Pourquoi les certificats sont importants
Les certificats sont des identifiants numériques délivrés par des autorités de certification (CA). Ils contiennent la clé publique du serveur et sont signés par la CA pour prouver leur authenticité. Lorsque votre navigateur se connecte, il vérifie :
- Le certificat est-il signé par une CA de confiance ?
- Le nom de domaine correspond-il ?
- Le certificat est-il expiré ou révoqué ?
Si l'une de ces vérifications échoue, vous verrez un avertissement. Les certificats auto-signés sont acceptables pour les tests, mais pas pour la production.
Chiffrement dans TLS : symétrique et asymétrique
TLS utilise à la fois le chiffrement asymétrique et symétrique :
- Le chiffrement asymétrique (par exemple RSA, ECDSA) est utilisé pendant la poignée de main pour échanger des clés de manière sécurisée. Il est lent mais résout le problème de distribution des clés.
- Le chiffrement symétrique (par exemple AES, ChaCha20) est utilisé pour le chiffrement en masse des données après la poignée de main. Il est rapide et efficace.
Le TLS 1.3 moderne utilise Diffie-Hellman éphémère pour l'échange de clés, offrant ainsi la confidentialité persistante (forward secrecy) : même si la clé privée du serveur est compromise plus tard, les sessions passées restent sécurisées.
Étapes pratiques pour mettre en œuvre HTTPS sur votre site
Prêt à sécuriser votre site ? Suivez ces étapes :
- Obtenez un certificat : Utilisez Let's Encrypt (gratuit) ou une CA commerciale.
- Installez le certificat sur votre serveur web (Nginx, Apache, etc.).
- Configurez votre serveur pour utiliser des protocoles et des chiffrements forts. Désactivez TLS 1.0/1.1 et SSLv3.
- Redirigez HTTP vers HTTPS avec une redirection 301.
- Activez HSTS (HTTP Strict Transport Security) pour forcer les navigateurs à utiliser HTTPS.
- Testez votre configuration à l'aide d'outils comme le test SSL de SSL Labs.
Voici un extrait de configuration Nginx pour HTTPS :
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
location / {
root /var/www/html;
index index.html;
}
}
N'oubliez pas de renouveler automatiquement les certificats (par exemple avec Certbot).
Pièges courants liés à TLS et comment les éviter
- Certificats expirés : Mettez en place un renouvellement automatique et une surveillance.
- Contenu mixte : Assurez-vous que toutes les ressources (images, scripts) sont chargées via HTTPS.
- Chiffrements faibles : N'utilisez que des suites de chiffrement fortes ; désactivez RC4, DES, etc.
- Certificats intermédiaires manquants : Incluez la chaîne complète dans la configuration de votre serveur.
- Absence de HSTS : Sans HSTS, les utilisateurs peuvent être rétrogradés vers HTTP.
FAQ
Quelle est la différence entre TLS et SSL ?
SSL est le prédécesseur de TLS. Les versions SSL sont obsolètes en raison de vulnérabilités de sécurité. Lorsque les gens parlent de « certificat SSL », ils désignent généralement un certificat TLS. Utilisez toujours TLS 1.2 ou 1.3.
Comment HTTPS affecte-t-il les performances ?
Le TLS moderne ajoute une latence minimale (un aller-retour en TLS 1.3). Avec la reprise de session et HTTP/2, la surcharge est négligeable. En fait, HTTPS permet des protocoles plus rapides comme HTTP/2 et la compression Brotli.
Puis-je utiliser HTTPS sans certificat d'une CA ?
Vous pouvez utiliser un certificat auto-signé, mais les navigateurs afficheront un avertissement. Pour les sites publics, utilisez toujours un certificat d'une CA de confiance. Let's Encrypt fournit des certificats gratuits approuvés par tous les principaux navigateurs.
Besoin de vérifier rapidement les en-têtes de sécurité de votre site ou de générer une configuration sécurisée ? Essayez notre Analyseur de logs Nginx pour inspecter le trafic et vous assurer que votre configuration HTTPS fonctionne correctement.