Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : La cryptographie

Comment HTTPS protège vos données : La cryptographie orientée web

⏱️ Temps de lecture estimé : 12 minutes
Accueil PHP 8 Comment HTTPS protège vos données : La cryptographie orientée web

Lorsque vous saisissez un mot de passe ou vos coordonnées bancaires sur un site web, vous le faites en partant d’un principe fondamental : la confiance. Vous supposez que vos données ne seront ni volées, ni altérées, ni espionnées. Pourtant, sans une protection efficace, ces informations pourraient être interceptées à tout moment par un tiers malveillant. C’est ici qu’intervient HTTPS, le protocole de communication sécurisé du web moderne.

Souvent perçu comme une simple version « améliorée » du HTTP, le HTTPS repose pourtant sur des mécanismes cryptographiques complexes et des certificats numériques qui garantissent à la fois la confidentialité, l’intégrité et l’authenticité des échanges entre votre navigateur et le serveur.

Dans ce chapitre, vous allez comprendre pourquoi HTTPS est essentielcomment il protège réellement vos données, et surtout comment l’implémenter concrètement sur votre propre site web grâce à un certificat SSL/TLS.

Que vous soyez développeur, webmaster ou simplement curieux de comprendre comment fonctionne la sécurité du web, ce guide vous expliquera tout, pas à pas, avec des exemples clairs et accessibles.

HTTP et HTTPS : comprendre la différence fondamentale

Pour bien saisir l’intérêt du HTTPS, commençons par une comparaison simple.
Le protocole HTTP (HyperText Transfer Protocol) a été conçu à l’origine pour permettre l’échange de données entre un navigateur et un serveur. Il fonctionne, mais n’offre aucune sécurité : toutes les données circulent en clair. Cela signifie que si vous vous connectez sur un site en HTTP, toutes les informations que vous envoyez peuvent être interceptées par un tiers (via un Wi-Fi public, un proxy, ou un routeur compromis).

Le protocole HTTPS (HyperText Transfer Protocol Secure) vient corriger cela. Il ajoute une couche de chiffrement (grâce à SSL/TLS) qui transforme chaque échange en une suite de caractères incompréhensible sans la clé de déchiffrement appropriée.

Concrètement :

  • En HTTP, lorsque vous saisissez un mot de passe, il transite tel quel sur le réseau.
  • En HTTPS, ce même mot de passe est d’abord chiffré à l’aide d’un algorithme cryptographique, puis déchiffré uniquement par le serveur destinataire légitime.

Ainsi, même si un pirate intercepte les données, il ne peut rien en faire sans posséder la clé secrète.

Le rôle central du protocole SSL/TLS

Définition simple

Le HTTPS repose sur le protocole TLS (Transport Layer Security), successeur de l’ancien SSL (Secure Sockets Layer).

Son rôle est de sécuriser les échanges entre deux machines connectées à Internet — typiquement, un serveur web et votre navigateur. TLS agit comme une enveloppe protectrice : il chiffre les données avant qu’elles ne quittent votre ordinateur et les déchiffre uniquement à leur arrivée sur le serveur.

Les trois garanties fondamentales

TLS (et donc HTTPS) ne se limite pas à « cacher les données ». Il assure trois garanties essentielles :

  1. La confidentialité : seules les parties autorisées peuvent lire les données.
  2. L’intégrité : les données ne peuvent pas être modifiées ou altérées sans être détectées.
  3. L’authenticité : le navigateur vérifie l’identité du serveur grâce à son certificat.

Le déroulement du handshake TLS

Avant toute communication sécurisée, un processus d’échange appelé handshake (poignée de main) s’effectue entre le navigateur (client) et le serveur. Durant ce handshake, les deux parties se mettent d’accord sur plusieurs éléments :

  • la version du protocole TLS à utiliser,
  • les algorithmes de chiffrement compatibles,
  • la clé de session utilisée pour chiffrer les données.

Le serveur envoie également son certificat numérique, prouvant son identité. Le navigateur le vérifie auprès d’une autorité de certification (CA) reconnue, comme Let’s Encrypt, DigiCert ou GlobalSign.

Une fois la clé établie et le certificat validé, la connexion devient totalement sécurisée.

La cryptographie : le cœur du système HTTPS

Le principe du chiffrement asymétrique

Le système SSL/TLS utilise la cryptographie asymétrique. Contrairement au chiffrement symétrique (où une seule clé est utilisée pour chiffrer et déchiffrer), le chiffrement asymétrique repose sur deux clés distinctes mais liées mathématiquement :

  • une clé publique, que tout le monde peut connaître,
  • une clé privée, gardée secrète sur le serveur.

Lorsqu’un navigateur envoie une requête, il chiffre les données avec la clé publique du serveur. Seule la clé privéecorrespondante pourra les déchiffrer.
Ainsi, même si quelqu’un intercepte le message, il ne pourra pas l’ouvrir sans posséder la clé privée.

Prenons un petit exemple conceptuel en PHP :

<?php
// Exemple simple de chiffrement asymétrique avec OpenSSL

$data = "Mot de passe secret";
$keys = openssl_pkey_new();

// Export des clés
openssl_pkey_export($keys, $privateKey);
$publicKeyDetails = openssl_pkey_get_details($keys);
$publicKey = $publicKeyDetails["key"];

// Chiffrement avec la clé publique
openssl_public_encrypt($data, $encrypted, $publicKey);

// Déchiffrement avec la clé privée
openssl_private_decrypt($encrypted, $decrypted, $privateKey);

echo "Texte original : $data\n";
echo "Texte chiffré : " . base64_encode($encrypted) . "\n";
echo "Texte déchiffré : $decrypted\n";

Cet exemple illustre la logique du chiffrement asymétrique : une clé chiffre, l’autre déchiffre. TLS applique ce principe à une échelle bien plus complexe et rapide, permettant de sécuriser des millions de connexions simultanées chaque jour.

Comprendre Les différences entre le cryptage symétrique et asymétrique.

L’échange des clés de session

Une fois le handshake terminé, le chiffrement asymétrique cède la place à un chiffrement symétrique, beaucoup plus rapide pour le transfert des données en continu. Le handshake sert donc uniquement à établir en toute sécurité une clé de session temporaire, qui sera ensuite utilisée pour le reste de la communication.

C’est un peu comme si vous utilisiez une boîte aux lettres : le chiffrement asymétrique sert à remettre la clé de la boîte au bon destinataire, puis le chiffrement symétrique sert à échanger les lettres plus rapidement une fois la confiance établie.

Les certificats SSL/TLS : preuve d’identité du serveur

Le certificat SSL/TLS agit comme une carte d’identité numérique.
Il contient plusieurs informations essentielles :

  • le nom de domaine auquel il est rattaché,
  • le nom de l’émetteur (autorité de certification),
  • la clé publique du serveur,
  • et sa période de validité.

Lorsqu’un utilisateur accède à un site HTTPS, le navigateur vérifie automatiquement que :

  1. Le certificat est valide et non expiré,
  2. Il est signé par une autorité de certification de confiance,
  3. Il correspond bien au nom de domaine visité.

S’il y a une incohérence, le navigateur affiche un avertissement de sécurité (« connexion non sécurisée »).

Les certificats sont signés numériquement par une autorité de certification, ce qui prouve que l’identité du site a été vérifiée. Sans cette étape, n’importe qui pourrait prétendre être n’importe quel site web.

Générer et installer un certificat SSL/TLS sur votre site

Le choix du type de certificat

Avant toute installation, il faut savoir qu’il existe plusieurs types de certificats, selon le niveau de validation demandé par l’autorité de certification :

  • DV (Domain Validation) : le plus courant et le plus rapide à obtenir. Il vérifie simplement que vous êtes bien le propriétaire du domaine.
  • OV (Organization Validation) : il valide également l’identité légale de votre entreprise.
  • EV (Extended Validation) : il offre le niveau de confiance le plus élevé, notamment pour les sites e-commerce et bancaires.

Pour la grande majorité des sites web, un certificat DV gratuit délivré par Let’s Encrypt suffit amplement. Il offre le même niveau de sécurité technique qu’un certificat payant, seule la vérification d’identité diffère.

Générer un certificat SSL gratuit avec Let’s Encrypt

Let’s Encrypt est une autorité de certification gratuite, soutenue par la fondation Mozilla et d’autres grands acteurs du web. Elle permet d’obtenir un certificat en quelques minutes, automatiquement renouvelable tous les 90 jours.

Étape 1 : installer Certbot

Certbot est un outil open-source qui permet de générer et d’installer un certificat Let’s Encrypt automatiquement. Sur un serveur Ubuntu, la commande est très simple :

sudo apt update
sudo apt install certbot python3-certbot-apache

Si vous utilisez Nginx, remplacez python3-certbot-apache par python3-certbot-nginx.

Étape 2 : lancer la génération du certificat

Une fois Certbot installé, vous pouvez lancer la commande suivante :

sudo certbot --apache

Certbot va vous poser quelques questions :

  • le nom de domaine à sécuriser,
  • l’adresse e-mail pour être prévenu du renouvellement,
  • si vous souhaitez forcer automatiquement le HTTPS (ce qu’il est vivement conseillé de faire).

Quelques secondes plus tard, votre certificat SSL/TLS est installé et activé.

Pour vérifier :
ouvrez votre navigateur et accédez à https://votresite.fr.
Le cadenas dans la barre d’adresse vous confirme que la connexion est désormais chiffrée.

Configuration manuelle du HTTPS (Apache et Nginx)

Dans certains cas, vous pouvez préférer configurer manuellement le HTTPS, notamment si vous gérez un serveur personnalisé ou souhaitez mieux comprendre ce qui se passe sous le capot.

Configuration HTTPS sous Apache

Pour Apache, il faut modifier le fichier de configuration du VirtualHost correspondant à votre site (souvent dans /etc/apache2/sites-available/votresite.conf).

Voici un exemple de configuration HTTPS :

<VirtualHost *:443>
    ServerName votresite.fr
    ServerAlias www.votresite.fr

    DocumentRoot /var/www/votresite

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/votresite.fr/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/votresite.fr/privkey.pem

    <Directory /var/www/votresite>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/votresite-error.log
    CustomLog ${APACHE_LOG_DIR}/votresite-access.log combined
</VirtualHost>

N’oubliez pas d’activer le module SSL :

sudo a2enmod ssl
sudo systemctl restart apache2

Votre site est maintenant accessible en HTTPS.

Configuration HTTPS sous Nginx

Sous Nginx, la configuration se trouve généralement dans /etc/nginx/sites-available/votresite.

Exemple de bloc serveur HTTPS :

server {
    listen 443 ssl;
    server_name votresite.fr www.votresite.fr;

    root /var/www/votresite;
    index index.php index.html;

    ssl_certificate /etc/letsencrypt/live/votresite.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/votresite.fr/privkey.pem;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}

Redémarrez ensuite Nginx :

sudo systemctl reload nginx

Votre site fonctionne désormais sous HTTPS avec un certificat Let’s Encrypt pleinement opérationnel.

Forcer automatiquement le HTTPS

Il est important que tous les visiteurs soient redirigés automatiquement vers la version sécurisée de votre site. Sinon, certains pourraient encore accéder à la version HTTP non chiffrée.

Redirection HTTPS via .htaccess (Apache)

Dans le fichier .htaccess à la racine de votre site, ajoutez :

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Cette règle vérifie si la requête n’est pas en HTTPS et redirige automatiquement vers la version sécurisée du même contenu.

Redirection HTTPS sous Nginx

Sous Nginx, ajoutez un bloc spécifique pour la redirection :

server {
    listen 80;
    server_name votresite.fr www.votresite.fr;
    return 301 https://$host$request_uri;
}

Ainsi, toutes les requêtes HTTP seront redirigées vers HTTPS avec un code 301 (redirection permanente), utile aussi pour le référencement.

Vérifier la sécurité et le niveau de chiffrement

Une fois le certificat installé, il est essentiel de vérifier la qualité de votre configuration.
Des outils comme SSL Labs (https://www.ssllabs.com/ssltest/) permettent de tester votre site et d’obtenir une note de sécurité entre A et F.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Vous pouvez aussi exécuter une commande rapide sur votre serveur :

openssl s_client -connect votresite.fr:443

Cette commande affiche les détails du certificat : autorité émettrice, validité, algorithme de chiffrement, etc.

Vérifiez que :

  • le certificat n’est pas expiré,
  • le protocole TLS 1.2 ou supérieur est utilisé,
  • les suites de chiffrement obsolètes (comme RC4 ou SHA-1) sont désactivées.

Une configuration moderne doit obligatoirement utiliser TLS 1.2 ou TLS 1.3.

Bonnes pratiques de sécurité et maintenance

Même si votre site est désormais protégé, la sécurité doit être entretenue dans le temps. Un certificat Let’s Encrypt expire au bout de 90 jours : il faut donc le renouveler automatiquement.

Avec Certbot, rien de plus simple :

sudo certbot renew --quiet

Cette commande peut être planifiée via une tâche cron pour s’exécuter régulièrement.

Pensez aussi à :

  • garder votre système et vos dépendances à jour,
  • désactiver les versions anciennes du protocole TLS,
  • éviter les redirections en chaîne (elles ralentissent la négociation SSL),
  • vérifier régulièrement la validité de votre certificat.

Enfin, n’oubliez pas que le HTTPS doit être présent partout : non seulement sur vos pages sensibles, mais sur l’ensemble du site, y compris les ressources statiques (images, CSS, scripts).

HTTPS et SEO : un avantage concret pour votre visibilité

Depuis 2014, Google favorise dans ses résultats de recherche les sites en HTTPS.
Un site sécurisé est perçu comme plus fiable et plus professionnel, ce qui améliore à la fois votre référencement naturel et la confiance des visiteurs.

Les navigateurs modernes affichent aussi un avertissement “Non sécurisé” sur les sites HTTP, ce qui peut faire fuir vos utilisateurs avant même qu’ils n’aient lu votre contenu.

En activant HTTPS, vous :

  • rassurez vos visiteurs,
  • améliorez votre taux de conversion,
  • et donnez un signal positif à Google.

Pour un site professionnel, blog ou e-commerce, le HTTPS n’est plus une option : c’est une nécessité absolue.

Les algorithmes cryptographiques derrière HTTPS

Le protocole TLS s’appuie sur plusieurs briques cryptographiques distinctes, qui travaillent ensemble pour assurer la sécurité des échanges.
Il ne s’agit pas d’un seul algorithme, mais d’un ensemble de mécanismes coordonnés, chacun jouant un rôle spécifique.

Le chiffrement symétrique

Une fois la session TLS établie, toutes les données échangées sont chiffrées à l’aide d’un algorithme symétrique. Cela signifie que la même clé est utilisée à la fois pour le chiffrement et pour le déchiffrement.

Les algorithmes symétriques les plus utilisés aujourd’hui sont :

  • AES (Advanced Encryption Standard) : très performant et sûr, il est le standard mondial actuel.
  • ChaCha20 : utilisé principalement sur les appareils mobiles, car il est plus rapide sur processeur ARM.

Exemple de chiffrement symétrique en Python, pour illustrer ce principe :

from cryptography.fernet import Fernet

# Génération d'une clé aléatoire
key = Fernet.generate_key()
cipher = Fernet(key)

message = b"Bonjour, ce message est secret."
encrypted = cipher.encrypt(message)
decrypted = cipher.decrypt(encrypted)

print("Message original :", message)
print("Message chiffré :", encrypted)
print("Message déchiffré :", decrypted)

Ici, le chiffrement est symétrique : la même clé key permet de chiffrer et déchiffrer le message.

Le chiffrement asymétrique (RSA, ECC)

Avant de pouvoir utiliser un chiffrement symétrique, le navigateur et le serveur doivent d’abord échanger une clé commune de manière sécurisée. C’est là qu’intervient le chiffrement asymétrique, avec des algorithmes comme RSA (encore très répandu) ou ECC (Elliptic Curve Cryptography), plus moderne et plus rapide.

  • RSA (Rivest–Shamir–Adleman) repose sur la difficulté de factoriser de très grands nombres premiers.
  • ECC repose sur des courbes elliptiques, ce qui permet d’obtenir la même sécurité avec des clés plus petites (et donc des performances supérieures).

TLS 1.3 privilégie désormais ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) pour établir la clé de session : un protocole qui génère une clé temporaire unique à chaque connexion.

C’est ce qui garantit la Perfect Forward Secrecy (PFS) : même si la clé privée du serveur est compromise plus tard, les anciennes communications restent indéchiffrables.

La signature numérique : prouver l’identité d’un site

Lorsqu’un certificat SSL est délivré par une autorité de certification, il est signé numériquement. Cette signature prouve que le certificat est authentique et n’a pas été falsifié.

Voici comment cela fonctionne :

  1. L’autorité calcule un hachage (empreinte numérique) du certificat, à l’aide d’un algorithme comme SHA-256.
  2. Elle chiffre cette empreinte avec sa clé privée pour créer la signature.
  3. Votre navigateur déchiffre la signature à l’aide de la clé publique de l’autorité de certification.

Si les empreintes correspondent, la signature est validée et la chaîne de confiance est complète.

Chaque navigateur contient déjà une liste d’autorités de certification reconnues, ce qui lui permet de vérifier automatiquement chaque certificat rencontré.

13. L’intégrité des données : le rôle des fonctions de hachage

HTTPS garantit aussi que les données n’ont pas été modifiées en route.
Cette protection repose sur les fonctions de hachage cryptographique, comme SHA-256 ou SHA-3.

Une fonction de hachage transforme un texte en une empreinte unique de taille fixe.
Si un seul caractère du texte est modifié, l’empreinte change complètement.

Exemple simple en PHP :

<?php
$message = "Bonjour le monde";
$hash = hash('sha256', $message);

echo "Message : $message\n";
echo "Empreinte SHA-256 : $hash\n";

Dans TLS, ces fonctions de hachage sont combinées avec les clés de session pour former des codes d’authentification de message (MAC).
Ainsi, si quelqu’un tente d’altérer les données en transit, le navigateur le détecte immédiatement et coupe la connexion.

TLS 1.3 : la nouvelle génération de sécurité

La version TLS 1.3, publiée en 2018, a modernisé la sécurité du web de manière considérable. Elle est aujourd’hui utilisée par la majorité des sites sécurisés.

Les principales améliorations :

  • Handshake plus rapide : une seule étape au lieu de deux auparavant, ce qui réduit la latence.
  • Perfect Forward Secrecy obligatoire, grâce à ECDHE.
  • Suppression des algorithmes obsolètes (comme RSA statique ou MD5).
  • Chiffrement par défaut plus robuste, avec AES-GCM ou ChaCha20-Poly1305.

En clair, TLS 1.3 rend le web plus rapide, plus sûr et plus résistant aux attaques.

Pour vérifier si votre serveur utilise bien TLS 1.3, vous pouvez exécuter :

openssl s_client -connect votresite.fr:443 -tls1_3

Si la connexion est établie sans erreur, vous êtes à jour.

HTTPS et vie privée : au-delà du simple chiffrement

On pense souvent que le HTTPS ne protège que les mots de passe ou les paiements, mais son rôle est bien plus large. En réalité, il protège toutes les données échangées, même celles qui semblent anodines.

Par exemple, si un utilisateur visite un blog en HTTP, n’importe quel fournisseur d’accès ou réseau Wi-Fi public peut :

  • voir quelles pages il consulte,
  • modifier les contenus reçus (injection de publicité ou de code malveillant),
  • ou rediriger vers un faux site.

Avec HTTPS, ces risques disparaissent. Les données sont chiffrées, le contenu ne peut pas être modifié, et l’utilisateur est certain de parler au bon serveur.

C’est pourquoi Google Chrome, Firefox et Safari marquent désormais tous les sites HTTP comme « non sécurisés ». Le HTTPS est donc aussi une question de protection de la vie privée.

Les erreurs courantes à éviter

Même avec un certificat valide, certaines erreurs peuvent compromettre la sécurité ou le référencement de votre site.

Voici les plus fréquentes :

  • Mélanger du contenu sécurisé et non sécurisé sur la même page (appelé mixed content).
    Par exemple, charger une image via http:// dans une page https://.
    Cela empêche le cadenas de sécurité de s’afficher correctement.
  • Oublier de renouveler le certificat, ce qui entraîne une alerte rouge sur tous les navigateurs.
  • Utiliser un certificat auto-signé sur un site public.
    Ces certificats ne sont pas reconnus par les navigateurs, qui afficheront un avertissement de sécurité.
  • Ne pas rediriger toutes les versions du site vers HTTPS (par exemple, www et non-www).

Ces erreurs peuvent facilement être évitées avec une bonne configuration et un suivi régulier.

Exemple complet de configuration HTTPS optimale (Apache)

Pour résumer tout ce que nous avons vu, voici une configuration complète et sécurisée pour Apache :

<VirtualHost *:443>
    ServerName votresite.fr
    DocumentRoot /var/www/votresite

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/votresite.fr/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/votresite.fr/privkey.pem

    # Protocoles modernes uniquement
    SSLProtocol TLSv1.2 TLSv1.3

    # Suites de chiffrement fortes
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLHonorCipherOrder on

    # Redirection automatique vers HTTPS
    Redirect permanent / https://votresite.fr/
</VirtualHost>

Cette configuration désactive les anciens protocoles, force l’utilisation de TLS 1.2 et TLS 1.3, et empêche les algorithmes faibles.

Le futur de la sécurité web

Le HTTPS n’est pas une fin en soi, mais une base solide sur laquelle s’appuie toute la sécurité moderne du web. De nouvelles technologies viennent renforcer cette fondation :

  • HTTP/3 (basé sur QUIC), qui intègre le chiffrement directement dans le protocole de transport, rendant les connexions plus rapides.
  • Certificat à durée de vie réduite, pour limiter les risques en cas de compromission.
  • OCSP stapling et HSTS, pour améliorer la rapidité et éviter les attaques de type downgrade.

À terme, il est probable que tout le web devienne entièrement chiffré, et que le HTTP classique disparaisse totalement.

Le HTTPS, symbole d’un web de confiance

Passer un site en HTTPS n’est plus une option, c’est un devoir de responsabilité numérique. Il protège vos visiteurs, vos données et votre réputation. Mais au-delà de l’aspect technique, il incarne surtout la confiance, ce ciment indispensable d’un web libre et sûr.

Grâce aux certificats SSL/TLS et aux protocoles modernes comme TLS 1.3, il est aujourd’hui possible de sécuriser un site gratuitement, rapidement et efficacement.
L’installation d’un certificat Let’s Encrypt ne prend que quelques minutes, mais ses bénéfices sont immenses : un site plus crédible, mieux classé par Google, et des visiteurs rassurés.

Comprendre comment HTTPS fonctionne, c’est aussi comprendre les fondations invisibles de notre monde connecté. Et pour tout développeur web, maîtriser ces mécanismes est un passage essentiel — au même titre que savoir coder ou gérer une base de données.

Le web de demain sera chiffré, authentifié et transparent. À vous, désormais, de faire partie de ceux qui le construisent en toute confiance.