Une commande passée depuis une gare
Un commercial passe une commande fournisseur depuis le Wi-Fi gratuit d'une gare. N'importe qui sur ce réseau peut écouter ce qui passe.
Le site commence par https et le navigateur affiche un cadenas. Que peut voir la personne qui écoute ? Et que ne peut-elle pas voir ? C'est une question que l'on pose souvent en entretien.
À la fin de cette leçon
Remarque
Je peux expliquer ce que HTTPS protège.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| HTTP | la langue des navigateurs et des serveurs web | |
| Requête | le message que le navigateur envoie | GET /panier |
| Code de statut | le nombre qui résume la réponse | 404 |
| Chiffrer | rendre un message illisible sans la clé | |
| TLS | la couche qui chiffre et vérifie la connexion | |
| Certificat | la carte d'identité numérique d'un site |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
HTTP est un échange de textes
Le navigateur envoie une requête : une méthode, un chemin et quelques en-têtes. GET /panier demande la page du panier.
Le serveur répond avec un code de statut, puis le contenu. Les codes en 200 disent que tout va bien. Les codes en 400 disent que la demande pose problème. Les codes en 500 disent que le serveur a échoué.
Les codes que vous lirez dans les tickets
| Code | Sens | Exemple au travail |
|---|---|---|
| 200 | Réussi | La page du panier s’affiche |
| 301 | Déplacé | L'ancienne adresse renvoie vers la nouvelle |
| 403 | Interdit | Un salarié ouvre une page réservée aux managers |
| 404 | Introuvable | Un lien vers un produit supprimé |
| 500 | Erreur du serveur | Le site plante pendant le paiement |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Essayez : lire un code de statut
# Une requête HTTP est un simple texte
requete = "GET /panier HTTP/1.1\nHost: librairie-martin.example\n"
print(requete)
# La première ligne de la réponse donne un code
reponse = "HTTP/1.1 200 OK"
code = int(reponse.split(" ")[1])
if code < 400:
print(code, ": tout va bien")
else:
print(code, ": il y a une erreur")
# Remplacez 200 OK par 404 Not Found, puis cliquez sur Exécuter.
HTTPS, c’est HTTP dans un tunnel chiffré
HTTP seul voyage en clair : quiconque est sur le chemin peut le lire ou le modifier. HTTPS ajoute TLS autour de chaque échange.
TLS apporte trois protections. La confidentialité : personne ne lit le contenu. L'intégrité : personne ne le modifie en route sans être repéré. L'authentification : le site prouve son identité avec un certificat.
Wi-Fi de la gare : qui voit quoi ?
| Élément | Visible par un espion | Pourquoi |
|---|---|---|
| Adresse IP du site | Oui | Il faut bien acheminer les paquets |
| Nom du site | Oui, en général | Le DNS et le début de TLS le montrent |
| Chemin de la page | Non | Il voyage dans le tunnel chiffré |
| Mot de passe et cookies | Non | Ils sont chiffrés |
| Contenu de la commande | Non | Il est chiffré |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Essayez : ce qui reste visible
url = "https://librairie-martin.example/compte?commande=1042"
# On enlève "https://", puis on coupe au premier "/"
sans_schema = url.split("://")[1]
morceaux = sans_schema.split("/", 1)
domaine = morceaux[0]
chemin = "/" + morceaux[1]
print("Visible par le réseau :", domaine)
print("Chiffré par HTTPS :", chemin)
# Remplacez /compte?commande=1042 par /paiement, puis cliquez sur Exécuter.
Une erreur fréquente
Attention
Beaucoup pensent que le cadenas prouve qu'un site est honnête. Le cadenas dit seulement que la connexion est chiffrée vers ce nom précis. Un faux site bancaire peut avoir un cadenas : vérifiez toujours le nom dans la barre d'adresse.
Le navigateur vérifie le certificat
Avant d'afficher le cadenas, le navigateur fait trois vérifications. Le nom du certificat doit correspondre au site demandé. La date du jour doit être dans la période de validité. Une autorité de confiance doit avoir signé le certificat.
Un certificat expiré est une panne classique en entreprise. Le site marche, mais tous les navigateurs affichent une alerte.
Vraie sortie de curl -v
$ curl -v https://librairie-martin.example/panier
* Trying 203.0.113.25:443...
* Connected to librairie-martin.example (203.0.113.25) port 443
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* Server certificate:
* subject: CN=librairie-martin.example
* start date: Sep 1 00:00:00 2026 GMT
* expire date: Nov 30 23:59:59 2026 GMT
* issuer: C=US; O=Let's Encrypt; CN=R11
* SSL certificate verify ok.
> GET /panier HTTP/2
> Host: librairie-martin.example
>
< HTTP/2 200
< content-type: text/html; charset=utf-8