Dans un monde où les échanges numériques sont omniprésents, la question de la sécurité est devenue incontournable. Chaque jour, nous envoyons des emails, nous remplissons des formulaires en ligne, nous effectuons des paiements, nous nous connectons à des sites protégés par HTTPS… Tous ces échanges reposent sur un principe fondamental : la cryptographie et OpenSSL.
Parmi les nombreux outils permettant de chiffrer, de signer et de vérifier des données, OpenSSL occupe une place essentielle. Cet outil open source, disponible sur la plupart des systèmes, est à la fois un moteur de chiffrement et un ensemble de bibliothèques utilisées dans d’innombrables logiciels et serveurs. C’est grâce à lui, par exemple, que votre navigateur peut établir une connexion HTTPS sécurisée avec un site web.
Dans ce chapitre, nous allons découvrir ensemble ce que sont une clé publique, une clé privée et une signature numérique, avant d’apprendre comment les générer avec OpenSSL. Vous verrez également comment les manipuler en PHP, car notre objectif est de comprendre la cryptographie dans un contexte concret de développement web.
- Comprendre le principe de la cryptographie asymétrique
- Comment fonctionne une signature numérique ?
- Comprendre le rôle d’OpenSSL dans tout cela
- RSA : l’algorithme le plus utilisé avec OpenSSL
- Les formats de clés : PEM, DER, PKCS#8…
- OpenSSL et PHP : une combinaison puissante
- Créer une clé publique et une clé privée avec OpenSSL
- Préparer son environnement OpenSSL
- Générer une clé privée RSA avec OpenSSL
- Générer la clé publique associée
- Lire et vérifier le contenu d’une clé
- Générer une clé publique et privée en un seul fichier PEM
- Créer une clé EC (Elliptic Curve) avec OpenSSL
- Signer un fichier avec une clé privée (OpenSSL)
- Vérifier une signature avec la clé publique
- Convertir les clés vers d’autres formats
- Bonnes pratiques pour la gestion des clés
- Exemple complet : génération et vérification d’une signature numérique
- OpenSSL et PHP : une introduction pratique
- Générer une paire de clés RSA directement en PHP
- Chiffrer et déchiffrer un message
- Signer un message en PHP
- Vérifier une signature avec la clé publique
- Générer et lire un hachage (empreinte SHA256) en PHP
- Exemple combiné : tout le processus complet en PHP
- Chiffrer avec une clé symétrique et RSA
- Cas d’usage concrets dans le développement web
- Maîtriser OpenSSL, un atout indispensable
Comprendre le principe de la cryptographie asymétrique
Avant d’entrer dans les détails techniques, il faut bien comprendre le concept fondamental sur lequel repose tout notre sujet : la cryptographie asymétrique, aussi appelée cryptographie à clé publique.
Contrairement à la cryptographie symétrique, où l’on utilise une seule et même clé pour chiffrer et déchiffrer un message, la cryptographie asymétrique repose sur une paire de clés distinctes mais mathématiquement liées : une clé publique et une clé privée.
La clé publique
La clé publique est, comme son nom l’indique, destinée à être partagée librement. Vous pouvez la transmettre à n’importe qui, la publier sur un site web ou l’intégrer dans un certificat numérique. Son rôle est de chiffrer les données ou de vérifier une signature numérique.
Autrement dit, si une personne veut vous envoyer un message secret, elle utilise votre clé publique pour le chiffrer. Ce message ne pourra ensuite être déchiffré que par votre clé privée, que vous êtes seul à posséder.
La clé privée
La clé privée, au contraire, doit rester strictement confidentielle. Elle vous appartient et ne doit jamais quitter votre système. C’est elle qui permet de :
- déchiffrer un message chiffré avec votre clé publique ;
- créer une signature numérique, prouvant que c’est bien vous l’auteur d’un message.
Ainsi, le couple de clés fonctionne toujours ensemble : ce qui est chiffré avec la clé publique ne peut être déchiffré qu’avec la clé privée, et inversement.
Une analogie simple
Imaginez une boîte aux lettres sécurisée :
- la fente correspond à votre clé publique : tout le monde peut y glisser un message, mais personne ne peut le récupérer ;
- la clé de la boîte, c’est votre clé privée : vous seul pouvez ouvrir et lire le contenu.
C’est exactement le même principe dans le monde numérique.
Comment fonctionne une signature numérique ?
Lorsqu’on parle de signature numérique, on ne parle pas simplement de coller une image d’une signature manuscrite sur un document.
Il s’agit ici d’un mécanisme mathématique de vérification : il garantit à la fois l’authenticité (le message vient bien de la bonne personne), l’intégrité (le message n’a pas été altéré) et parfois la non-répudiation (l’auteur ne peut pas nier l’avoir signé).
Le principe général
La signature numérique repose sur un procédé en deux étapes :
- Création de la signature :
L’expéditeur calcule un empreinte (hash) de son message à l’aide d’un algorithme comme SHA256, puis chiffre cette empreinte avec sa clé privée. Le résultat obtenu est la signature numérique. - Vérification de la signature :
Le destinataire, de son côté, utilise la clé publique de l’expéditeur pour déchiffrer la signature et comparer l’empreinte obtenue avec celle qu’il calcule lui-même à partir du message reçu. Si les deux coïncident, cela prouve que :- le message n’a pas été modifié ;
- la clé privée correspondante a bien été utilisée pour le signer.
Ce processus est la base de la confiance numérique : c’est ce qui permet de garantir que le message provient bien de la source attendue.
Comprendre le rôle d’OpenSSL dans tout cela
OpenSSL est un outil incontournable pour manipuler ces clés et signatures. Il permet de générer, chiffrer, signer, vérifier, convertir ou encore analyser des certificats et des fichiers cryptographiques.
Sous Linux ou macOS, il est généralement déjà installé. Sous Windows, il suffit de télécharger l’exécutable depuis le site officiel du projet OpenSSL ou via un gestionnaire comme Chocolatey.
Grâce à OpenSSL, vous pouvez :
- créer des paires de clés RSA ou EC (Elliptic Curve) ;
- générer des certificats auto-signés (très utiles en développement) ;
- signer et vérifier des fichiers ;
- convertir des clés entre formats PEM, DER, PFX, etc.
RSA : l’algorithme le plus utilisé avec OpenSSL
Lorsqu’on génère une clé avec OpenSSL, l’algorithme le plus courant est RSA (Rivest–Shamir–Adleman). C’est un système de chiffrement asymétrique inventé à la fin des années 1970, encore aujourd’hui largement utilisé dans le web, notamment pour HTTPS.
Le principe de RSA repose sur la difficulté de factoriser de très grands nombres premiers. En pratique, on choisit deux nombres premiers très grands (plusieurs centaines de chiffres), puis on les multiplie pour obtenir un nombre appelé modulus. Ce modulus est utilisé à la fois dans la clé publique et dans la clé privée, mais seul celui qui connaît les deux nombres premiers peut retrouver la clé privée.
Ainsi, même si vous partagez votre clé publique, personne ne peut raisonnablement retrouver votre clé privée — à moins de casser un problème mathématique qui mettrait des siècles à être résolu par les ordinateurs actuels.
Les formats de clés : PEM, DER, PKCS#8…
Lorsqu’on parle de clés OpenSSL, on rencontre souvent des fichiers avec des extensions comme .pem
, .der
, .key
, .crt
, .csr
, etc. Ces fichiers contiennent la clé publique, la clé privée ou un certificat, mais dans des formats différents.
Voici les plus courants :
- PEM (Privacy Enhanced Mail) : format texte (Base64) très lisible, encadré par des balises
-----BEGIN PRIVATE KEY-----
et-----END PRIVATE KEY-----
. C’est le plus utilisé dans OpenSSL. - DER : format binaire équivalent, souvent utilisé sous Windows ou Java.
- PKCS#8 : format standardisé pour stocker des clés privées, souvent utilisé pour plus de compatibilité.
- PKCS#12 / PFX : format qui combine clé privée et certificat, généralement protégé par un mot de passe.
Dans la suite de ce chapitre, nous utiliserons surtout le format PEM, car il est le plus simple à manipuler et lisible à l’œil humain.
OpenSSL et PHP : une combinaison puissante
Vous l’avez sans doute déjà deviné : tout ce que nous allons faire avec OpenSSL peut aussi être automatisé directement dans un script PHP. PHP intègre en effet une extension OpenSSL native, qui vous permet de générer, signer, chiffrer ou vérifier des données sans passer par le terminal.
Par exemple, vous pouvez générer une paire de clés RSA directement en PHP, signer un message avec votre clé privée, ou vérifier une signature avec une clé publique. C’est ce qui rend cette approche particulièrement intéressante dans le cadre de projets web, où la sécurité et l’authentification jouent un rôle central.
Mais avant de passer à la pratique dans le code, il est essentiel de savoir comment générer correctement vos clés avec OpenSSL en ligne de commande.
Créer une clé publique et une clé privée avec OpenSSL
Préparer son environnement OpenSSL
Avant de générer des clés, il faut s’assurer qu’OpenSSL est bien installé sur votre système. Heureusement, c’est souvent déjà le cas.
Pour le vérifier, ouvrez votre terminal (ou l’invite de commandes) et tapez simplement :
openssl version
Si OpenSSL est installé, la version s’affiche, par exemple :
OpenSSL 3.2.1 30 Jan 2024
Sinon, vous pouvez l’installer très facilement :
- Sous Linux (Debian, Ubuntu, etc.) :
sudo apt update sudo apt install openssl
- Sous macOS (avec Homebrew) :
brew install openssl
- Sous Windows :
Téléchargez l’installateur depuis https://slproweb.com/products/Win32OpenSSL.html, puis suivez les instructions.
Une fois installé, vous pouvez utiliser la commande openssl
dans n’importe quel terminal.
Générer une clé privée RSA avec OpenSSL
La première étape consiste à créer votre clé privée, celle que vous devez garder secrète. Cette clé est la base de tout : la clé publique sera dérivée d’elle.
Commande de base
Voici la commande la plus simple pour générer une clé privée RSA de 2048 bits :
openssl genrsa -out private.key 2048
Cette commande crée un fichier nommé private.key
contenant votre clé privée.
genrsa
: indique qu’on veut générer une clé RSA.-out private.key
: précise le nom du fichier de sortie.2048
: définit la taille de la clé en bits.
Vous pouvez choisir une taille plus grande pour plus de sécurité, comme 4096
, mais cela ralentira légèrement les opérations de chiffrement et déchiffrement.
Sécuriser la clé privée avec un mot de passe
Vous pouvez également protéger votre clé privée par un mot de passe, afin d’éviter toute utilisation non autorisée :
openssl genrsa -aes256 -out private.key 4096
- L’option
-aes256
chiffre la clé privée à l’aide de l’algorithme AES-256. - Lors de l’exécution, OpenSSL vous demandera de saisir un mot de passe.
Cela ajoute une couche de sécurité essentielle si vous devez stocker la clé sur un serveur.
Générer la clé publique associée
Une fois la clé privée générée, on peut facilement en extraire la clé publique correspondante. C’est elle que vous pourrez diffuser librement, par exemple pour vérifier une signature ou chiffrer des données destinées à vous seul.
Commande d’extraction
Tapez simplement :
openssl rsa -in private.key -pubout -out public.key
Explication :
-in private.key
: on indique le fichier d’entrée (la clé privée).-pubout
: on demande à OpenSSL d’extraire la clé publique.-out public.key
: on précise le fichier de sortie.
Vous obtenez alors un fichier public.key
contenant votre clé publique au format PEM.
Le contenu ressemble à ceci :
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApJm5S...
...5V2qqA9aLKZtdf3zGkp0A==
-----END PUBLIC KEY-----
Lire et vérifier le contenu d’une clé
Vous pouvez afficher les détails d’une clé pour en vérifier le format et le contenu.
Lire une clé privée (sans afficher les données sensibles)
openssl rsa -in private.key -text -noout
Cette commande affiche :
- la taille de la clé,
- le modulus (n),
- les exposants publics et privés.
Lire une clé publique
openssl rsa -in public.key -pubin -text -noout
Vous verrez le modulus et l’exposant public. Ces valeurs déterminent la “signature” mathématique de votre clé.
Générer une clé publique et privée en un seul fichier PEM
Il est aussi possible de générer directement une paire de clés au format PEM combiné :
openssl req -x509 -newkey rsa:2048 -keyout private.pem -out public.pem -days 365
Cette commande crée :
private.pem
: la clé privée chiffrée,public.pem
: un certificat auto-signé contenant la clé publique.
Le paramètre -days 365
indique que le certificat sera valable un an. Ce type de fichier PEM combiné est souvent utilisé pour des tests de serveur HTTPS ou pour signer des fichiers localement.
Créer une clé EC (Elliptic Curve) avec OpenSSL
Même si RSA reste très répandu, les clés ECC (Elliptic Curve Cryptography) sont de plus en plus utilisées car elles offrent un excellent niveau de sécurité pour une taille beaucoup plus petite.
Exemple de génération d’une clé privée EC :

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 ?openssl ecparam -name prime256v1 -genkey -noout -out ec_private.key
Puis on extrait la clé publique correspondante :
openssl ec -in ec_private.key -pubout -out ec_public.key
Les clés ECC sont très efficaces dans les applications modernes et sont largement utilisées pour TLS/HTTPS.
Signer un fichier avec une clé privée (OpenSSL)
Maintenant que nous avons nos clés, nous pouvons créer une signature numérique.
Exemple pratique
Imaginons que nous ayons un fichier message.txt
contenant :
Bonjour, ceci est un test de signature numérique.
Nous allons le signer avec notre clé privée RSA :
openssl dgst -sha256 -sign private.key -out signature.bin message.txt
Explications :
dgst
signifie “digest” (hachage).-sha256
indique l’algorithme de hachage utilisé.-sign private.key
précise la clé privée à utiliser.-out signature.bin
est le fichier de sortie (binaire).message.txt
est le fichier d’entrée.
OpenSSL va donc créer un hash SHA-256 du fichier, puis le chiffrer avec votre clé privée pour produire la signature.
Vérifier une signature avec la clé publique
Pour vérifier que la signature est authentique, il suffit d’utiliser la clé publique correspondante :
openssl dgst -sha256 -verify public.key -signature signature.bin message.txt
Si tout est correct, OpenSSL affichera :
Verified OK
Sinon, vous obtiendrez :
Verification Failure
C’est le cœur même de la signature numérique : seule la clé publique issue de la clé privée utilisée pour signer permettra une vérification réussie.
Convertir les clés vers d’autres formats
Vous pouvez convertir vos clés selon les besoins du projet.
Clé privée vers PKCS#8
openssl pkcs8 -topk8 -inform PEM -in private.key -out private_pkcs8.pem -nocrypt
Ce format est souvent requis par certaines bibliothèques ou API web.
Clé publique en format DER (binaire)
openssl rsa -in private.key -pubout -outform DER -out public.der
Clé privée chiffrée en PEM
openssl rsa -aes256 -in private.key -out private_encrypted.pem
Bonnes pratiques pour la gestion des clés
Une clé privée doit toujours rester secrète et protégée. Voici quelques conseils simples :
- Ne jamais partager une clé privée.
- Toujours la protéger par un mot de passe avec
-aes256
si elle doit être stockée sur un serveur. - Utiliser des permissions restreintes (600 sous Linux).
- Sauvegarder vos clés dans un espace sûr et hors ligne si possible.
- Renouveler régulièrement vos clés, surtout pour des certificats auto-signés.
Exemple complet : génération et vérification d’une signature numérique
Récapitulons rapidement le processus complet :
# 1. Générer la clé privée
openssl genrsa -out private.key 2048
# 2. Extraire la clé publique
openssl rsa -in private.key -pubout -out public.key
# 3. Créer un fichier à signer
echo "Bonjour Créa-Blog !" > message.txt
# 4. Signer le fichier
openssl dgst -sha256 -sign private.key -out signature.bin message.txt
# 5. Vérifier la signature
openssl dgst -sha256 -verify public.key -signature signature.bin message.txt
Et si tout se passe bien, la dernière commande affichera :
Verified OK
Ce petit test simple résume parfaitement la logique de la cryptographie asymétrique et du fonctionnement d’OpenSSL.
OpenSSL et PHP : une introduction pratique
PHP intègre nativement l’extension OpenSSL, ce qui vous permet de manipuler les clés et les signatures sans passer par la ligne de commande. C’est extrêmement utile, par exemple, pour :
- générer automatiquement des paires de clés ;
- signer des tokens ou des fichiers ;
- chiffrer des données avant stockage ;
- vérifier l’origine d’un message envoyé par un client.
Aucune installation particulière n’est nécessaire : l’extension OpenSSL est activée par défaut sur la plupart des serveurs PHP modernes. Vous pouvez le vérifier en exécutant :
<?php
phpinfo();
Cherchez la section “openssl”. Si elle apparaît, vous êtes prêt.
Générer une paire de clés RSA directement en PHP
Vous pouvez générer des clés sans passer par le terminal. Voici un exemple complet :
<?php
// Configuration des options RSA
$config = [
"private_key_bits" => 2048, // Taille de la clé
"private_key_type" => OPENSSL_KEYTYPE_RSA
];
// Génération de la paire de clés
$res = openssl_pkey_new($config);
// Extraction de la clé privée
openssl_pkey_export($res, $privateKey);
// Extraction de la clé publique
$publicKeyDetails = openssl_pkey_get_details($res);
$publicKey = $publicKeyDetails["key"];
// Sauvegarde dans des fichiers
file_put_contents("private.pem", $privateKey);
file_put_contents("public.pem", $publicKey);
echo "Clés générées avec succès !";
Ce script crée deux fichiers :
- private.pem : la clé privée (gardez-la secrète),
- public.pem : la clé publique (diffusable librement).
Vous pouvez ensuite ouvrir ces fichiers pour constater qu’ils sont au format PEM, comme ceux générés en ligne de commande.
Chiffrer et déchiffrer un message
La cryptographie asymétrique permet à deux utilisateurs d’échanger des messages sécurisés sans partager un mot de passe commun.
Imaginons que vous vouliez chiffrer un message avec une clé publique, puis le déchiffrer avec la clé privée.
Exemple complet
<?php
$message = "Bonjour Créa-Troyes, voici un message sécurisé !";
// Charger la clé publique
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));
// Chiffrement avec la clé publique
openssl_public_encrypt($message, $encrypted, $publicKey);
// Affichage du texte chiffré (encodé en base64)
$encryptedBase64 = base64_encode($encrypted);
echo "Message chiffré : " . $encryptedBase64 . "\n";
// Charger la clé privée
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
// Déchiffrement avec la clé privée
openssl_private_decrypt(base64_decode($encryptedBase64), $decrypted, $privateKey);
echo "Message déchiffré : " . $decrypted;
Résultat attendu dans la console :
Message chiffré : U2FsdGVkX19ab...
Message déchiffré : Bonjour Créa-Troyes, voici un message sécurisé !
Ici, la fonction :
openssl_public_encrypt()
chiffre le message avec la clé publique,openssl_private_decrypt()
le déchiffre avec la clé privée.
Cette technique est idéale pour sécuriser de petits messages ou des clés de session, mais attention : RSA n’est pas conçu pour chiffrer de gros volumes de données. Pour cela, on utilise souvent une clé symétrique (AES), elle-même transmise via RSA.
Signer un message en PHP
La signature numérique permet de garantir que le message vient bien de vous et qu’il n’a pas été modifié.
Exemple de signature
<?php
$message = "Ce message provient du Créa-blog";
// Charger la clé privée
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
// Création de la signature
openssl_sign($message, $signature, $privateKey, OPENSSL_ALGO_SHA256);
// Sauvegarde de la signature
file_put_contents("signature.bin", $signature);
// Affichage encodé
echo "Signature générée : " . base64_encode($signature);
Le fichier signature.bin
contient la signature numérique du message.
Vérifier une signature avec la clé publique
Le destinataire du message peut vérifier son authenticité grâce à votre clé publique.
Exemple de vérification
<?php
$message = "Ce message provient du Créa-blog";
$signature = file_get_contents("signature.bin");
// Charger la clé publique
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));
// Vérification
$verification = openssl_verify($message, $signature, $publicKey, OPENSSL_ALGO_SHA256);
if ($verification === 1) {
echo "Signature valide : le message est authentique.";
} elseif ($verification === 0) {
echo "Signature invalide : le message a été modifié ou la clé ne correspond pas.";
} else {
echo "Erreur de vérification.";
}
OpenSSL en PHP retourne :
1
si la signature est valide,0
si elle est invalide,-1
en cas d’erreur technique.
Ce mécanisme est fondamental pour vérifier l’intégrité de données reçues d’un client, d’un serveur ou d’un fichier téléchargé.
Générer et lire un hachage (empreinte SHA256) en PHP
Souvent, on ne souhaite pas signer un message entier, mais seulement son empreinte (ou “hash”). C’est plus rapide et plus léger.
Exemple simple
<?php
$data = "Apprendre la cryptographie avec le Créa-blog !";
// Calcul de l’empreinte SHA256
$hash = hash('sha256', $data);
echo "Empreinte SHA256 : " . $hash;
Sortie :
Empreinte SHA256 : 4f3bc9f2e6b5e62dfb8...
Vous pouvez ensuite signer cette empreinte plutôt que le texte complet.
Exemple combiné : tout le processus complet en PHP
Voici un exemple de bout en bout, qui reprend toutes les étapes :
- génération des clés,
- signature d’un message,
- vérification.
Code complet
<?php
// Étape 1 : Génération de la paire de clés RSA
$config = ["private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA];
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privateKey);
$publicKeyDetails = openssl_pkey_get_details($res);
$publicKey = $publicKeyDetails["key"];
// Étape 2 : Sauvegarde des clés
file_put_contents("private.pem", $privateKey);
file_put_contents("public.pem", $publicKey);
// Étape 3 : Message à signer
$message = "Sécurisons nos projets PHP avec OpenSSL !";
// Étape 4 : Création de la signature
openssl_sign($message, $signature, $privateKey, OPENSSL_ALGO_SHA256);
// Étape 5 : Vérification
$verification = openssl_verify($message, $signature, $publicKey, OPENSSL_ALGO_SHA256);
if ($verification === 1) {
echo "Signature valide ! Le message est authentique.";
} else {
echo "Erreur : signature invalide.";
}
Ce script illustre parfaitement le cycle complet de signature et de vérification sans aucune intervention manuelle.
Chiffrer avec une clé symétrique et RSA
Dans les applications réelles, RSA est souvent combiné avec un chiffrement symétrique comme AES. RSA sert à chiffrer la clé AES, tandis qu’AES sert à chiffrer le contenu. Cette combinaison est utilisée dans HTTPS, les emails chiffrés, ou les tokens sécurisés.
Exemple illustratif
<?php
$data = "Message confidentiel du Créa-blog";
$aesKey = openssl_random_pseudo_bytes(32); // clé AES de 256 bits
$iv = openssl_random_pseudo_bytes(16);
// Chiffrement AES
$encryptedData = openssl_encrypt($data, 'aes-256-cbc', $aesKey, OPENSSL_RAW_DATA, $iv);
// Chiffrement de la clé AES avec RSA publique
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));
openssl_public_encrypt($aesKey, $encryptedKey, $publicKey);
// Sauvegarde des données
file_put_contents("data.bin", $encryptedData);
file_put_contents("key.bin", $encryptedKey);
file_put_contents("iv.bin", $iv);
Et pour déchiffrer :
<?php
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
$encryptedData = file_get_contents("data.bin");
$encryptedKey = file_get_contents("key.bin");
$iv = file_get_contents("iv.bin");
// Déchiffrer la clé AES avec la clé privée RSA
openssl_private_decrypt($encryptedKey, $decryptedAESKey, $privateKey);
// Déchiffrer les données avec AES
$decrypted = openssl_decrypt($encryptedData, 'aes-256-cbc', $decryptedAESKey, OPENSSL_RAW_DATA, $iv);
echo $decrypted;
C’est exactement le principe utilisé par les protocoles sécurisés :
RSA protège la clé de session, et AES chiffre le contenu réel.
Cas d’usage concrets dans le développement web
Authentification sécurisée
Vous pouvez utiliser une paire de clés OpenSSL pour signer des tokens JWT ou des identifiants de session, garantissant qu’ils ne peuvent pas être falsifiés côté client.
Vérification d’intégrité des fichiers
Lors du téléchargement d’un fichier depuis votre serveur (par exemple un document ou un binaire), vous pouvez fournir :
- le fichier,
- sa signature,
- et la clé publique de vérification.
Le client peut alors vérifier que le fichier n’a pas été altéré.
Communication client–serveur
Un client peut chiffrer ses requêtes avec la clé publique du serveur. Le serveur les déchiffre ensuite avec sa clé privée, garantissant la confidentialité des échanges.
Maîtriser OpenSSL, un atout indispensable
Vous savez désormais non seulement ce que sont une clé publique, une clé privée et une signature numérique, mais aussi comment les manipuler efficacement avec OpenSSL, que ce soit en ligne de commande ou directement dans PHP.
En comprenant ces principes, vous touchez au cœur même de la sécurité moderne.
Qu’il s’agisse de chiffrer un message, de signer un document, de vérifier une identité ou de sécuriser un site HTTPS, OpenSSL est l’outil de référence, puissant, fiable et universel.
Pour un développeur web, savoir l’utiliser n’est plus un luxe mais une compétence essentielle. C’est ce qui vous permettra de concevoir des applications capables de protéger les données de vos utilisateurs, tout en respectant les normes de sécurité actuelles.
Et surtout, gardez en tête qu’une clé bien générée, bien stockée et bien utilisée est la première pierre d’une architecture de confiance. La cryptographie n’est pas un domaine réservé aux experts : elle est à la portée de tous ceux qui prennent le temps de la comprendre pas à pas.