{"id":171,"date":"2026-06-15T16:25:15","date_gmt":"2026-06-15T16:25:15","guid":{"rendered":"https:\/\/shattered.io\/fr\/2026\/06\/15\/openssl-cles-certificats-tutoriel\/"},"modified":"2026-06-15T16:26:47","modified_gmt":"2026-06-15T16:26:47","slug":"openssl-cles-certificats-tutoriel","status":"publish","type":"post","link":"https:\/\/shattered.io\/fr\/2026\/06\/15\/openssl-cles-certificats-tutoriel\/","title":{"rendered":"OpenSSL : cl\u00e9s et certificats en 12 \u00e9tapes [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">OpenSSL \u00e9quipe la quasi-totalit\u00e9 des serveurs web, des conteneurs et des objets connect\u00e9s de la plan\u00e8te. C&#8217;est l&#8217;outil qui g\u00e9n\u00e8re vos cl\u00e9s, fabrique vos certificats TLS, chiffre vos fichiers et teste la s\u00e9curit\u00e9 d&#8217;un serveur distant. Pourtant, sa ligne de commande intimide. Des dizaines de sous-commandes, des centaines d&#8217;options, une documentation dense : beaucoup d&#8217;administrateurs copient-collent des incantations trouv\u00e9es en ligne sans les comprendre, et reproduisent des r\u00e9glages obsol\u00e8tes (RSA 1024 bits, SHA-1, chiffrement sans d\u00e9rivation de cl\u00e9).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ce tutoriel corrige le tir. En 12 \u00e9tapes et environ 30 minutes, vous allez g\u00e9n\u00e9rer des cl\u00e9s RSA et \u00e0 courbe elliptique solides, cr\u00e9er des certificats auto-sign\u00e9s et des demandes de signature (CSR), inspecter et v\u00e9rifier des certificats, chiffrer des fichiers avec AES-256, et construire une mini-autorit\u00e9 de certification compl\u00e8te. Toutes les commandes sont \u00e0 jour pour OpenSSL 3.5 LTS, la version publi\u00e9e le 8 avril 2025 qui ajoute la cryptographie post-quantique. Chaque \u00e9tape montre la sortie attendue, et une section d\u00e9pannage r\u00e8gle les huit erreurs les plus courantes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pourquoi-openssl-2026\">OpenSSL en 2026 : pourquoi cet outil reste incontournable<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL est une biblioth\u00e8que cryptographique open source et un utilitaire en ligne de commande n\u00e9s en 1998. Vingt-huit ans plus tard, il reste le socle de la s\u00e9curit\u00e9 du transport sur Internet. Apache, Nginx, Node.js, Python, la plupart des distributions Linux et d&#8217;innombrables appareils embarqu\u00e9s s&#8217;appuient sur sa biblioth\u00e8que <code>libcrypto<\/code> ou sur le binaire <code>openssl<\/code>. Ma\u00eetriser ses commandes, c&#8217;est tenir entre ses mains le couteau suisse de la cryptographie appliqu\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;ann\u00e9e 2025 a marqu\u00e9 un tournant. Avec la sortie d&#8217;OpenSSL 3.5, support \u00e0 long terme (LTS) jusqu&#8217;au 8 avril 2030, le projet int\u00e8gre nativement les algorithmes post-quantiques normalis\u00e9s par le NIST : ML-KEM (FIPS 203) pour l&#8217;\u00e9change de cl\u00e9s, ML-DSA (FIPS 204) et SLH-DSA (FIPS 205) pour les signatures. Concr\u00e8tement, les certificats et tunnels TLS que vous fabriquez aujourd&#8217;hui peuvent d\u00e9j\u00e0 r\u00e9sister \u00e0 un futur ordinateur quantique. C&#8217;est une raison de plus de remettre \u00e0 plat ses pratiques OpenSSL en 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au-del\u00e0 de TLS, OpenSSL sert de bo\u00eete \u00e0 outils universelle : chiffrer une archive avant de l&#8217;envoyer, calculer une empreinte SHA-256, g\u00e9n\u00e9rer 32 octets al\u00e9atoires pour une cl\u00e9 sym\u00e9trique, convertir un certificat du format PEM vers PKCS#12 pour Windows, ou diagnostiquer pourquoi un navigateur refuse un site. Ce tutoriel couvre tous ces cas d&#8217;usage avec des commandes v\u00e9rifi\u00e9es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis-versions\">Pr\u00e9requis et versions d&#8217;OpenSSL en 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de commencer, assurez-vous de disposer des \u00e9l\u00e9ments suivants. Ce tutoriel suppose une connaissance de base du terminal (naviguer dans les dossiers, lancer une commande), mais aucune comp\u00e9tence pr\u00e9alable en cryptographie.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OpenSSL 3.5 LTS<\/strong> (recommand\u00e9) ou toute version 3.x encore maintenue. La 3.0 LTS reste acceptable pour les commandes classiques mais ne g\u00e8re pas le post-quantique.<\/li>\n<li><strong>Un syst\u00e8me Linux, macOS ou Windows.<\/strong> Sous Linux, OpenSSL est presque toujours pr\u00e9install\u00e9. Sous Windows, installez-le via les binaires de la communaut\u00e9 ou le gestionnaire <code>winget<\/code>.<\/li>\n<li><strong>Un terminal<\/strong> (Bash, Zsh, PowerShell ou l&#8217;invite de commandes Windows).<\/li>\n<li><strong>Environ 50 Mo d&#8217;espace disque<\/strong> et les droits d&#8217;\u00e9criture dans un dossier de travail.<\/li>\n<li><strong>Une connexion Internet<\/strong> uniquement pour l&#8217;\u00e9tape de test d&#8217;un serveur distant.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le choix de version a son importance. Le tableau ci-dessous r\u00e9sume l&#8217;\u00e9tat du support des principales branches d&#8217;OpenSSL au 15 juin 2026. \u00c9vitez \u00e0 tout prix OpenSSL 1.1.1 et 1.0.2, en fin de vie, ainsi que toute branche 1.x pour de nouveaux d\u00e9ploiements.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Version<\/th><th>Type<\/th><th>Date de sortie<\/th><th>Fin de support<\/th><th>Post-quantique<\/th><\/tr><\/thead><tbody>\n<tr><td>OpenSSL 3.5<\/td><td>LTS<\/td><td>8 avril 2025<\/td><td>8 avril 2030<\/td><td>Oui (ML-KEM, ML-DSA, SLH-DSA)<\/td><\/tr>\n<tr><td>OpenSSL 3.4<\/td><td>Standard<\/td><td>22 octobre 2024<\/td><td>22 octobre 2026<\/td><td>Non<\/td><\/tr>\n<tr><td>OpenSSL 3.3<\/td><td>Standard<\/td><td>9 avril 2024<\/td><td>9 avril 2026<\/td><td>Non<\/td><\/tr>\n<tr><td>OpenSSL 3.0<\/td><td>LTS<\/td><td>7 septembre 2021<\/td><td>7 septembre 2026<\/td><td>Non<\/td><\/tr>\n<tr><td>OpenSSL 1.1.1<\/td><td>Fin de vie<\/td><td>11 septembre 2018<\/td><td>Termin\u00e9 (11 sept. 2023)<\/td><td>Non<\/td><\/tr>\n<\/tbody><\/table><figcaption>Sources : politique de versions et calendrier de support du projet OpenSSL.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Depuis la version 3.0.0, OpenSSL suit un sch\u00e9ma de num\u00e9rotation MAJEUR.MINEUR.CORRECTIF, avec une compatibilit\u00e9 d&#8217;API et d&#8217;ABI garantie au sein d&#8217;une m\u00eame version majeure. Autrement dit, une biblioth\u00e8que compil\u00e9e pour la 3.0 fonctionne sans recompilation avec la 3.5. Pour ce tutoriel, n&#8217;importe quelle 3.x conviendra, sauf mention explicite du post-quantique r\u00e9serv\u00e9 \u00e0 la 3.5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-1-2-installer-verifier\">\u00c9tapes 1 et 2 : installer et v\u00e9rifier OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Commencez par v\u00e9rifier la version install\u00e9e. Ouvrez un terminal et lancez la commande suivante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u00c9tape 1 : v\u00e9rifier la version install\u00e9e\nopenssl version -a<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous devriez obtenir une sortie comparable \u00e0 celle-ci, qui confirme la version, la date de compilation et le dossier des certificats racine du syst\u00e8me :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSSL 3.5.0 8 Apr 2025 (Library: OpenSSL 3.5.0 8 Apr 2025)\nbuilt on: Tue Apr  8 13:14:00 2025 UTC\nplatform: linux-x86_64\nOPENSSLDIR: \"\/usr\/lib\/ssl\"\nENGINESDIR: \"\/usr\/lib\/x86_64-linux-gnu\/engines-3\"\nMODULESDIR: \"\/usr\/lib\/x86_64-linux-gnu\/ossl-modules\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si la commande renvoie une version 1.x, ou \u00ab command not found \u00bb, passez \u00e0 l&#8217;installation. Voici les commandes pour les trois grands environnements.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u00c9tape 2 : installer OpenSSL selon votre syst\u00e8me\n\n# Debian \/ Ubuntu\nsudo apt update && sudo apt install openssl\n\n# Fedora \/ RHEL \/ Rocky\nsudo dnf install openssl\n\n# macOS (via Homebrew, version plus r\u00e9cente que celle d'Apple)\nbrew install openssl@3\n\n# Windows (via winget)\nwinget install ShiningLight.OpenSSL.Light<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sous macOS, attention : Apple livre sa propre variante (LibreSSL) sous le nom <code>openssl<\/code>. Apr\u00e8s installation via Homebrew, ajoutez le binaire au PATH ou appelez-le par son chemin complet (par exemple <code>\/opt\/homebrew\/opt\/openssl@3\/bin\/openssl<\/code>) pour b\u00e9n\u00e9ficier de la vraie version 3.5. Cr\u00e9ez maintenant un dossier de travail d\u00e9di\u00e9, vous y stockerez toutes les cl\u00e9s et certificats du tutoriel.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/tuto-openssl && cd ~\/tuto-openssl<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-3-cle-rsa\">\u00c9tape 3 : g\u00e9n\u00e9rer une cl\u00e9 priv\u00e9e RSA solide<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e9 priv\u00e9e est le secret fondamental de toute la cha\u00eene. Si elle fuit, l&#8217;attaquant peut usurper votre identit\u00e9 ou d\u00e9chiffrer vos communications. En 2026, la commande moderne pour g\u00e9n\u00e9rer une cl\u00e9 RSA est <code>genpkey<\/code>, qui remplace l&#8217;ancienne <code>genrsa<\/code>. Visez 3072 bits au minimum, 4096 bits pour une marge \u00e0 long terme.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cl\u00e9 RSA 3072 bits (\u00e9quilibre s\u00e9curit\u00e9 \/ performance)\nopenssl genpkey -algorithm RSA \\\n  -pkeyopt rsa_keygen_bits:3072 \\\n  -out serveur.key\n\n# Variante chiffr\u00e9e par mot de passe (recommand\u00e9 pour une cl\u00e9 sensible)\nopenssl genpkey -algorithm RSA \\\n  -pkeyopt rsa_keygen_bits:3072 \\\n  -aes-256-cbc \\\n  -out serveur-protegee.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La seconde commande demande une phrase de passe et chiffre la cl\u00e9 sur le disque avec AES-256. Sans cette protection, n&#8217;importe qui ayant acc\u00e8s au fichier d\u00e9tient votre cl\u00e9 en clair. Restreignez aussi les permissions du fichier sous Linux et macOS :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 serveur.key\n# V\u00e9rifier le contenu et la taille de la cl\u00e9\nopenssl pkey -in serveur.key -text -noout | head -3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La sortie commence par <code>Private-Key: (3072 bit, 2 primes)<\/code>, confirmant la taille demand\u00e9e. Pourquoi 3072 et non 2048 ? Le NIST classe RSA 2048 dans une cat\u00e9gorie de s\u00e9curit\u00e9 d&#8217;environ 112 bits, suffisante jusqu&#8217;\u00e0 2030 mais sans marge. RSA 3072 atteint 128 bits, le seuil retenu par l&#8217;ANSSI et le NIST pour les usages durables. Au-del\u00e0 de 4096 bits, le gain de s\u00e9curit\u00e9 devient marginal alors que le co\u00fbt de calcul explose : mieux vaut alors basculer sur les courbes elliptiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-4-cle-ec\">\u00c9tape 4 : g\u00e9n\u00e9rer une cl\u00e9 \u00e0 courbe elliptique (ECC et Ed25519)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les courbes elliptiques offrent une s\u00e9curit\u00e9 \u00e9quivalente \u00e0 RSA pour des cl\u00e9s bien plus petites et des calculs plus rapides. Une cl\u00e9 P-256 (256 bits) procure une robustesse comparable \u00e0 RSA 3072 (3072 bits). C&#8217;est le choix par d\u00e9faut des d\u00e9ploiements modernes, des navigateurs aux passerelles d&#8217;API.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cl\u00e9 P-256 (courbe prime256v1, la plus r\u00e9pandue pour TLS)\nopenssl ecparam -name prime256v1 -genkey -noout -out ec-p256.key\n\n# M\u00e9thode \u00e9quivalente avec genpkey\nopenssl genpkey -algorithm EC \\\n  -pkeyopt ec_paramgen_curve:P-256 \\\n  -out ec-p256-bis.key\n\n# Cl\u00e9 Ed25519 (signatures modernes, rapides et compactes)\nopenssl genpkey -algorithm ED25519 -out ed25519.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 m\u00e9rite une mention sp\u00e9ciale. Cet algorithme de signature, con\u00e7u par Daniel J. Bernstein, est immunis\u00e9 contre plusieurs classes d&#8217;erreurs d&#8217;impl\u00e9mentation qui ont historiquement affaibli ECDSA, comme la r\u00e9utilisation de nonce. Il est d\u00e9sormais accept\u00e9 par OpenSSH, TLS 1.3 et la plupart des \u00e9cosyst\u00e8mes. Pour une nouvelle paire de cl\u00e9s de signature, c&#8217;est un excellent d\u00e9faut. Le tableau suivant r\u00e9capitule les recommandations d&#8217;algorithmes en 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Usage<\/th><th>\u00c0 \u00e9viter<\/th><th>Acceptable<\/th><th>Recommand\u00e9 2026<\/th><\/tr><\/thead><tbody>\n<tr><td>Cl\u00e9 asym\u00e9trique RSA<\/td><td>1024 \/ 2048 bits<\/td><td>3072 bits<\/td><td>4096 bits<\/td><\/tr>\n<tr><td>Courbe elliptique<\/td><td>secp192r1<\/td><td>P-256<\/td><td>P-384 \/ Ed25519<\/td><\/tr>\n<tr><td>Empreinte (hachage)<\/td><td>MD5 \/ SHA-1<\/td><td>SHA-256<\/td><td>SHA-384 \/ SHA-512<\/td><\/tr>\n<tr><td>Chiffrement sym\u00e9trique<\/td><td>DES \/ RC4 \/ AES-CBC seul<\/td><td>AES-256-CBC + PBKDF2<\/td><td>AES-256-GCM<\/td><\/tr>\n<tr><td>Protocole de transport<\/td><td>SSLv3 \/ TLS 1.0 \/ 1.1<\/td><td>TLS 1.2<\/td><td>TLS 1.3<\/td><\/tr>\n<\/tbody><\/table><figcaption>Recommandations d&#8217;algorithmes cryptographiques pour OpenSSL en 2026.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-5-certificat-auto-signe\">\u00c9tape 5 : cr\u00e9er un certificat auto-sign\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un certificat auto-sign\u00e9 associe votre cl\u00e9 publique \u00e0 une identit\u00e9 (un nom de domaine) sans passer par une autorit\u00e9 externe. Parfait pour le d\u00e9veloppement, les tests internes ou un service interne, mais rejet\u00e9 par les navigateurs pour un site public. La commande <code>req -x509<\/code> g\u00e9n\u00e8re le certificat en une seule passe.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Certificat auto-sign\u00e9 valable 365 jours, sign\u00e9 en SHA-256\nopenssl req -x509 -new -key serveur.key \\\n  -sha256 -days 365 \\\n  -subj \"\/C=FR\/ST=Ile-de-France\/L=Paris\/O=Mon Entreprise\/CN=exemple.local\" \\\n  -out serveur.crt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le champ <code>-subj<\/code> \u00e9vite les questions interactives en renseignant directement le pays (C), la r\u00e9gion (ST), la ville (L), l&#8217;organisation (O) et surtout le nom commun (CN), c&#8217;est-\u00e0-dire le domaine. Probl\u00e8me : les navigateurs modernes ignorent le CN et exigent l&#8217;extension Subject Alternative Name (SAN). Pour un certificat r\u00e9ellement utilisable, ajoutez les SAN via un param\u00e8tre d\u00e9di\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Certificat auto-sign\u00e9 AVEC Subject Alternative Names (SAN)\nopenssl req -x509 -new -key serveur.key -sha256 -days 365 \\\n  -subj \"\/C=FR\/O=Mon Entreprise\/CN=exemple.local\" \\\n  -addext \"subjectAltName=DNS:exemple.local,DNS:www.exemple.local,IP:127.0.0.1\" \\\n  -out serveur-san.crt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;option <code>-addext<\/code>, disponible depuis OpenSSL 1.1.1, injecte les SAN sans fichier de configuration externe. C&#8217;est la m\u00e9thode la plus simple pour obtenir un certificat que Chrome ou Firefox accepteront (apr\u00e8s ajout manuel \u00e0 la liste de confiance, puisqu&#8217;il reste auto-sign\u00e9).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-6-csr\">\u00c9tape 6 : g\u00e9n\u00e9rer une CSR pour une autorit\u00e9 de certification<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un site public, vous ne signez pas vous-m\u00eame : vous envoyez une demande de signature de certificat (CSR, Certificate Signing Request) \u00e0 une autorit\u00e9 de certification comme Let&#8217;s Encrypt ou une CA d&#8217;entreprise. La CSR contient votre cl\u00e9 publique et votre identit\u00e9, sign\u00e9es par votre cl\u00e9 priv\u00e9e. L&#8217;autorit\u00e9 renvoie alors un certificat sign\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># G\u00e9n\u00e9rer une CSR \u00e0 partir de la cl\u00e9 existante\nopenssl req -new -key serveur.key \\\n  -subj \"\/C=FR\/O=Mon Entreprise\/CN=www.exemple.fr\" \\\n  -addext \"subjectAltName=DNS:www.exemple.fr,DNS:exemple.fr\" \\\n  -out exemple.csr\n\n# V\u00e9rifier le contenu de la CSR avant envoi\nopenssl req -in exemple.csr -text -noout -verify<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La seconde commande affiche le sujet, la cl\u00e9 publique, les extensions demand\u00e9es et confirme <code>Certificate request self-signature verify OK<\/code>. V\u00e9rifiez toujours une CSR avant de l&#8217;envoyer : une erreur de domaine ou un SAN manquant vous obligerait \u00e0 recommencer toute la proc\u00e9dure aupr\u00e8s de l&#8217;autorit\u00e9. Si vous voulez g\u00e9n\u00e9rer la cl\u00e9 et la CSR en une seule commande, combinez les deux op\u00e9rations :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cl\u00e9 EC P-256 + CSR en une seule passe\nopenssl req -new -newkey ec \\\n  -pkeyopt ec_paramgen_curve:P-256 \\\n  -nodes -keyout www.key \\\n  -subj \"\/C=FR\/O=Mon Entreprise\/CN=www.exemple.fr\" \\\n  -out www.csr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;option <code>-nodes<\/code> (pour \u00ab no DES \u00bb) signifie que la cl\u00e9 n&#8217;est pas chiffr\u00e9e par mot de passe, pratique pour un serveur qui doit d\u00e9marrer sans intervention humaine. Sur une machine de production, pesez ce compromis : une cl\u00e9 non chiffr\u00e9e lue par un attaquant ayant acc\u00e8s au disque est imm\u00e9diatement exploitable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-7-inspecter-certificat\">\u00c9tape 7 : inspecter et v\u00e9rifier un certificat<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Savoir lire un certificat est une comp\u00e9tence quotidienne en cybers\u00e9curit\u00e9. La sous-commande <code>x509<\/code> d\u00e9code un certificat au format PEM en texte lisible.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Afficher tout le certificat en clair\nopenssl x509 -in serveur-san.crt -text -noout\n\n# Extraire seulement les informations cl\u00e9s\nopenssl x509 -in serveur-san.crt -noout -subject -issuer -dates -fingerprint -sha256<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La seconde commande produit une sortie compacte et tr\u00e8s utile au quotidien :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>subject=C=FR, O=Mon Entreprise, CN=exemple.local\nissuer=C=FR, O=Mon Entreprise, CN=exemple.local\nnotBefore=Jun 15 09:00:00 2026 GMT\nnotAfter=Jun 15 09:00:00 2027 GMT\nSHA256 Fingerprint=A1:B2:C3:...:9F<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Comme <code>subject<\/code> et <code>issuer<\/code> sont identiques, on confirme qu&#8217;il s&#8217;agit bien d&#8217;un certificat auto-sign\u00e9. Les dates <code>notBefore<\/code> et <code>notAfter<\/code> d\u00e9limitent la p\u00e9riode de validit\u00e9. L&#8217;empreinte SHA-256 sert \u00e0 comparer deux certificats ou \u00e0 \u00e9pingler (pinning) une cl\u00e9 dans une application. Pour v\u00e9rifier qu&#8217;une cl\u00e9 priv\u00e9e et un certificat forment bien une paire coh\u00e9rente, comparez leurs empreintes de cl\u00e9 publique :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Les deux empreintes doivent \u00eatre identiques\nopenssl x509 -in serveur.crt -noout -pubkey | openssl sha256\nopenssl pkey -in serveur.key -pubout | openssl sha256<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-8-s-client\">\u00c9tape 8 : tester un serveur distant avec s_client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL n&#8217;est pas qu&#8217;un fabricant de cl\u00e9s, c&#8217;est aussi un client de diagnostic. La sous-commande <code>s_client<\/code> ouvre une connexion TLS vers un serveur et r\u00e9v\u00e8le tout : la cha\u00eene de certificats, la version du protocole, la suite de chiffrement n\u00e9goci\u00e9e et les \u00e9ventuelles erreurs de validation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Inspecter le certificat d'un serveur HTTPS\nopenssl s_client -connect exemple.fr:443 -servername exemple.fr &lt;\/dev\/null 2&gt;\/dev\/null \\\n  | openssl x509 -noout -subject -issuer -dates\n\n# Forcer TLS 1.3 et afficher la suite de chiffrement\nopenssl s_client -connect exemple.fr:443 -servername exemple.fr -tls1_3 &lt;\/dev\/null 2&gt;&amp;1 \\\n  | grep -E \"Protocol|Cipher\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;option <code>-servername<\/code> est indispensable : elle envoie l&#8217;extension SNI (Server Name Indication), sans laquelle un serveur h\u00e9bergeant plusieurs sites renverrait le mauvais certificat. La redirection <code>&lt;\/dev\/null<\/code> ferme l&#8217;entr\u00e9e pour que la commande rende la main au lieu de rester en attente. Vous pouvez aussi v\u00e9rifier la date d&#8217;expiration d&#8217;un certificat distant en une ligne, id\u00e9al pour un script de surveillance :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo | openssl s_client -connect exemple.fr:443 -servername exemple.fr 2&gt;\/dev\/null \\\n  | openssl x509 -noout -enddate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour aller plus loin sur la confiance et le r\u00f4le du cadenas, notre article <a href=\"\/https-et-tls\/\">HTTPS et TLS : comment votre connexion est prot\u00e9g\u00e9e<\/a> d\u00e9taille la poign\u00e9e de main TLS 1.3 de bout en bout.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-9-chiffrer-fichier\">\u00c9tape 9 : chiffrer un fichier avec AES-256<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL chiffre aussi des fichiers de fa\u00e7on sym\u00e9trique, par mot de passe. Cas typique : prot\u00e9ger une sauvegarde ou une archive avant de la transf\u00e9rer. La sous-commande <code>enc<\/code> s&#8217;en charge, mais attention \u00e0 un pi\u00e8ge majeur : sans d\u00e9rivation de cl\u00e9 robuste, votre mot de passe est mal prot\u00e9g\u00e9. Utilisez toujours l&#8217;option <code>-pbkdf2<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Chiffrer un fichier avec AES-256 et d\u00e9rivation PBKDF2\nopenssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt \\\n  -in secret.txt -out secret.enc\n\n# D\u00e9chiffrer\nopenssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 \\\n  -in secret.enc -out secret-dechiffre.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9cortiquons les options. <code>-aes-256-cbc<\/code> s\u00e9lectionne AES 256 bits. <code>-pbkdf2<\/code> active la fonction de d\u00e9rivation de cl\u00e9 PBKDF2, qui transforme votre mot de passe en cl\u00e9 cryptographique r\u00e9sistante aux attaques par dictionnaire. <code>-iter 600000<\/code> fixe le nombre d&#8217;it\u00e9rations, un param\u00e8tre de co\u00fbt align\u00e9 sur les recommandations OWASP 2025 pour PBKDF2 avec SHA-256. <code>-salt<\/code> ajoute un sel al\u00e9atoire, activ\u00e9 par d\u00e9faut mais explicit\u00e9 ici pour la clart\u00e9. Sans <code>-pbkdf2<\/code>, OpenSSL retombe sur une d\u00e9rivation h\u00e9rit\u00e9e et dangereusement faible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un usage plus avanc\u00e9, AES-256-GCM ajoute une authentification int\u00e9gr\u00e9e (le mode d\u00e9tecte toute alt\u00e9ration du fichier chiffr\u00e9). Le chiffrement par fichier reste cependant moins ergonomique avec GCM en ligne de commande ; pour le partage de fichiers chiffr\u00e9s au quotidien, notre tutoriel <a href=\"\/chiffrer-fichier-gpg-tutoriel\/\">GPG : chiffrer fichiers et emails en 12 \u00e9tapes<\/a> propose une alternative \u00e0 cl\u00e9 publique souvent plus pratique.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-10-empreintes-aleatoire\">\u00c9tape 10 : empreintes, signatures et al\u00e9a cryptographique<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Trois op\u00e9rations cryptographiques de base se font en une ligne avec OpenSSL : calculer une empreinte, signer un fichier et g\u00e9n\u00e9rer des octets al\u00e9atoires. Commen\u00e7ons par l&#8217;empreinte (hachage), qui v\u00e9rifie l&#8217;int\u00e9grit\u00e9 d&#8217;un fichier.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Empreinte SHA-256 d'un fichier\nopenssl dgst -sha256 archive.tar.gz\n\n# G\u00e9n\u00e9rer 32 octets al\u00e9atoires (cl\u00e9 AES-256) en hexad\u00e9cimal\nopenssl rand -hex 32\n\n# G\u00e9n\u00e9rer 24 octets al\u00e9atoires en base64 (mot de passe fort)\nopenssl rand -base64 24<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La commande <code>openssl rand<\/code> puise dans le g\u00e9n\u00e9rateur d&#8217;al\u00e9a cryptographique du syst\u00e8me, bien plus s\u00fbr qu&#8217;un mot de passe choisi \u00e0 la main. Pour la signature num\u00e9rique, OpenSSL combine une empreinte et votre cl\u00e9 priv\u00e9e. Le destinataire v\u00e9rifie avec votre cl\u00e9 publique.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Signer un fichier avec la cl\u00e9 priv\u00e9e\nopenssl dgst -sha256 -sign serveur.key -out document.sig document.pdf\n\n# V\u00e9rifier la signature avec la cl\u00e9 publique\nopenssl pkey -in serveur.key -pubout -out serveur.pub\nopenssl dgst -sha256 -verify serveur.pub -signature document.sig document.pdf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Une v\u00e9rification r\u00e9ussie affiche <code>Verified OK<\/code>. Toute modification du fichier, m\u00eame d&#8217;un seul octet, fait \u00e9chouer la v\u00e9rification : c&#8217;est tout l&#8217;int\u00e9r\u00eat de la signature. Pour comprendre en profondeur pourquoi le hachage est indissociable de la signature, lisez <a href=\"\/signatures-numeriques\/\">Signatures num\u00e9riques : comment le hachage et les cl\u00e9s garantissent l&#8217;authenticit\u00e9<\/a> et notre explication de <a href=\"\/sha-256\/\">SHA-256<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-11-conversion-formats\">\u00c9tape 11 : convertir les formats (PEM, DER, PKCS#12)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les certificats existent en plusieurs encodages, et chaque plateforme a ses pr\u00e9f\u00e9rences. PEM (texte base64, en-t\u00eates <code>-----BEGIN-----<\/code>) domine sous Linux. DER (binaire) sert dans certains contextes Java et Windows. PKCS#12 (extension <code>.p12<\/code> ou <code>.pfx<\/code>) regroupe cl\u00e9 priv\u00e9e et certificat dans un seul fichier, format attendu par Windows, IIS et de nombreux outils d&#8217;importation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># PEM vers DER\nopenssl x509 -in serveur.crt -outform DER -out serveur.der\n\n# DER vers PEM\nopenssl x509 -in serveur.der -inform DER -out serveur-retour.crt\n\n# Cr\u00e9er un paquet PKCS#12 (cl\u00e9 + certificat) pour Windows \/ IIS\nopenssl pkcs12 -export -inkey serveur.key -in serveur.crt \\\n  -name \"Mon certificat\" -out serveur.p12\n\n# Extraire la cl\u00e9 et le certificat depuis un PKCS#12\nopenssl pkcs12 -in serveur.p12 -nodes -out tout.pem<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La cr\u00e9ation d&#8217;un PKCS#12 demande un mot de passe d&#8217;export qui prot\u00e8ge le fichier, car il contient la cl\u00e9 priv\u00e9e. Ne transmettez jamais un <code>.p12<\/code> et son mot de passe par le m\u00eame canal. Ces conversions sont le pain quotidien de l&#8217;administrateur qui jongle entre serveurs Linux, postes Windows et passerelles d&#8217;API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-12-mini-pki\">\u00c9tape 12 : projet complet, construire une mini-PKI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Assemblons tout en un projet r\u00e9el : une infrastructure \u00e0 cl\u00e9s publiques (PKI) miniature avec une autorit\u00e9 de certification racine maison, qui signe ensuite un certificat de serveur. C&#8217;est exactement le m\u00e9canisme des CA publiques, \u00e0 l&#8217;\u00e9chelle de votre laboratoire ou d&#8217;un r\u00e9seau interne. Trois \u00e9tapes : cr\u00e9er la CA, g\u00e9n\u00e9rer une demande serveur, signer cette demande avec la CA.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 1. Cr\u00e9er la cl\u00e9 et le certificat de la CA racine (valable 10 ans)\nopenssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ca.key\nopenssl req -x509 -new -key ca.key -sha384 -days 3650 \\\n  -subj \"\/C=FR\/O=Mon Lab\/CN=Ma CA Racine\" \\\n  -out ca.crt\n\n# 2. Cr\u00e9er la cl\u00e9 et la CSR du serveur\nopenssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out app.key\nopenssl req -new -key app.key \\\n  -subj \"\/C=FR\/O=Mon Lab\/CN=app.interne.local\" \\\n  -addext \"subjectAltName=DNS:app.interne.local\" \\\n  -out app.csr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La CA est cr\u00e9\u00e9e. Reste \u00e0 signer la CSR du serveur. Comme <code>-addext<\/code> ne propage pas les SAN lors de la signature, on passe par un petit fichier d&#8217;extensions, m\u00e9thode robuste et explicite.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># 3. Fichier d'extensions pour le certificat serveur\ncat &gt; app.ext &lt;&lt;'EOF'\nbasicConstraints = CA:FALSE\nkeyUsage = digitalSignature, keyEncipherment\nextendedKeyUsage = serverAuth\nsubjectAltName = DNS:app.interne.local\nEOF\n\n# Signer la CSR avec la CA racine\nopenssl x509 -req -in app.csr \\\n  -CA ca.crt -CAkey ca.key -CAcreateserial \\\n  -days 365 -sha256 -extfile app.ext \\\n  -out app.crt\n\n# V\u00e9rifier que la CA a bien sign\u00e9 le certificat serveur\nopenssl verify -CAfile ca.crt app.crt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La derni\u00e8re commande doit afficher <code>app.crt: OK<\/code>. Vous disposez maintenant d&#8217;une cha\u00eene de confiance compl\u00e8te : importez <code>ca.crt<\/code> dans le magasin de confiance de vos machines, et tous les certificats sign\u00e9s par cette CA seront automatiquement reconnus. C&#8217;est le principe exact qui fait fonctionner le HTTPS \u00e0 l&#8217;\u00e9chelle du web, avec des autorit\u00e9s racines pr\u00e9install\u00e9es dans votre navigateur. Pour un site public r\u00e9el sans g\u00e9rer de CA, notre tutoriel <a href=\"\/certificat-ssl-certbot-nginx\/\">Certificat SSL gratuit avec Certbot et Nginx<\/a> automatise tout via Let&#8217;s Encrypt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"post-quantique\">OpenSSL et la cryptographie post-quantique<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La grande nouveaut\u00e9 d&#8217;OpenSSL 3.5 est le support natif des algorithmes post-quantiques normalis\u00e9s par le NIST en 2024. Un ordinateur quantique suffisamment puissant casserait RSA et les courbes elliptiques via l&#8217;algorithme de Shor. La parade : des sch\u00e9mas reposant sur d&#8217;autres probl\u00e8mes math\u00e9matiques. Le tableau ci-dessous pr\u00e9sente les trois familles int\u00e9gr\u00e9es.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Algorithme<\/th><th>Norme NIST<\/th><th>R\u00f4le<\/th><th>Remplace \u00e0 terme<\/th><\/tr><\/thead><tbody>\n<tr><td>ML-KEM (Kyber)<\/td><td>FIPS 203<\/td><td>\u00c9change de cl\u00e9s \/ encapsulation<\/td><td>RSA, ECDH<\/td><\/tr>\n<tr><td>ML-DSA (Dilithium)<\/td><td>FIPS 204<\/td><td>Signature num\u00e9rique<\/td><td>RSA, ECDSA<\/td><\/tr>\n<tr><td>SLH-DSA (SPHINCS+)<\/td><td>FIPS 205<\/td><td>Signature \u00e0 base de hachage<\/td><td>Signatures \u00e0 long terme<\/td><\/tr>\n<\/tbody><\/table><figcaption>Les algorithmes post-quantiques int\u00e9gr\u00e9s \u00e0 OpenSSL 3.5.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Avec OpenSSL 3.5, vous pouvez d\u00e9j\u00e0 g\u00e9n\u00e9rer une cl\u00e9 ML-DSA, la commande suivante illustre la simplicit\u00e9 de l&#8217;op\u00e9ration :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cl\u00e9 de signature post-quantique ML-DSA (OpenSSL 3.5 uniquement)\nopenssl genpkey -algorithm ML-DSA-65 -out pq-signature.key\n\n# V\u00e9rifier les algorithmes post-quantiques disponibles\nopenssl list -signature-algorithms | grep -i -E \"ML-DSA|SLH-DSA\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La strat\u00e9gie recommand\u00e9e pour 2026 est l&#8217;approche hybride : combiner un algorithme classique (P-256) et un algorithme post-quantique (ML-KEM) dans le m\u00eame \u00e9change TLS, afin de rester s\u00fbr m\u00eame si l&#8217;un des deux venait \u00e0 \u00eatre affaibli. Notre dossier <a href=\"\/cryptography-hub\/\">Cryptographie et fonctions de hachage<\/a> replace ces \u00e9volutions dans le contexte plus large de la migration post-quantique des entreprises.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pieges-courants\">6 pi\u00e8ges courants \u00e0 \u00e9viter avec OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ces erreurs reviennent sans cesse, y compris chez des professionnels exp\u00e9riment\u00e9s. Les conna\u00eetre vous \u00e9pargnera des heures de d\u00e9bogage et, surtout, des failles de s\u00e9curit\u00e9.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Oublier <code>-pbkdf2<\/code> lors du chiffrement de fichiers.<\/strong> Sans cette option, OpenSSL utilise une d\u00e9rivation de cl\u00e9 h\u00e9rit\u00e9e et faible. Un attaquant casse alors votre mot de passe bien plus vite. Ajoutez toujours <code>-pbkdf2 -iter 600000<\/code>.<\/li>\n<li><strong>G\u00e9n\u00e9rer un certificat sans Subject Alternative Name.<\/strong> Les navigateurs modernes ignorent le champ CN depuis des ann\u00e9es. Un certificat sans SAN provoque l&#8217;erreur <code>NET::ERR_CERT_COMMON_NAME_INVALID<\/code>. Utilisez <code>-addext \"subjectAltName=...\"<\/code>.<\/li>\n<li><strong>Laisser une cl\u00e9 priv\u00e9e en lecture pour tous.<\/strong> Une cl\u00e9 <code>serveur.key<\/code> avec des permissions 644 est lisible par tout utilisateur de la machine. Appliquez syst\u00e9matiquement <code>chmod 600<\/code>.<\/li>\n<li><strong>R\u00e9utiliser RSA 1024 ou SHA-1.<\/strong> Des tutoriels anciens tra\u00eenent partout. RSA 1024 et SHA-1 sont cryptographiquement obsol\u00e8tes. Visez RSA 3072 minimum et SHA-256 minimum.<\/li>\n<li><strong>Confondre cl\u00e9 publique et cl\u00e9 priv\u00e9e lors d&#8217;un partage.<\/strong> Vous ne distribuez jamais le fichier <code>.key<\/code>. Seuls le certificat (<code>.crt<\/code>) ou la cl\u00e9 publique (<code>.pub<\/code>) se partagent.<\/li>\n<li><strong>Oublier <code>-servername<\/code> avec <code>s_client<\/code>.<\/strong> Sans SNI, un serveur multi-domaines renvoie le mauvais certificat et vous diagnostiquez le mauvais site pendant une heure.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"depannage\">D\u00e9pannage : 8 erreurs fr\u00e9quentes et leurs solutions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici les messages d&#8217;erreur les plus courants rencontr\u00e9s avec OpenSSL et la mani\u00e8re de les r\u00e9soudre rapidement.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u00ab unable to load Private Key \u00bb.<\/strong> Le fichier n&#8217;est pas une cl\u00e9 valide, ou son format ne correspond pas. V\u00e9rifiez l&#8217;en-t\u00eate avec <code>head -1 fichier.key<\/code> : il doit indiquer <code>-----BEGIN PRIVATE KEY-----<\/code>. Une cl\u00e9 chiffr\u00e9e demande un mot de passe.<\/li>\n<li><strong>\u00ab error in req \u00bb ou aucune sortie.<\/strong> Le sujet <code>-subj<\/code> contient souvent un caract\u00e8re mal \u00e9chapp\u00e9. Entourez la valeur de guillemets et \u00e9vitez les caract\u00e8res sp\u00e9ciaux non \u00e9chapp\u00e9s.<\/li>\n<li><strong>\u00ab self-signed certificate in certificate chain \u00bb avec verify.<\/strong> Le certificat racine de la CA n&#8217;est pas fourni. Ajoutez <code>-CAfile ca.crt<\/code> pointant vers le bon certificat racine.<\/li>\n<li><strong>\u00ab NET::ERR_CERT_AUTHORITY_INVALID \u00bb dans le navigateur.<\/strong> Normal pour un certificat auto-sign\u00e9. Pour un usage de test, importez votre <code>ca.crt<\/code> dans le magasin de confiance du syst\u00e8me ou du navigateur.<\/li>\n<li><strong>\u00ab wrong tag \u00bb ou \u00ab nested asn1 error \u00bb lors d&#8217;une conversion.<\/strong> Vous m\u00e9langez les formats PEM et DER. Pr\u00e9cisez <code>-inform DER<\/code> ou <code>-inform PEM<\/code> selon le fichier source.<\/li>\n<li><strong>\u00ab bad decrypt \u00bb au d\u00e9chiffrement d&#8217;un fichier.<\/strong> Mauvais mot de passe, ou les options de chiffrement et de d\u00e9chiffrement diff\u00e8rent. Le d\u00e9chiffrement doit reprendre exactement <code>-pbkdf2 -iter 600000<\/code> et le m\u00eame algorithme.<\/li>\n<li><strong>s_client reste bloqu\u00e9 sans rendre la main.<\/strong> Il attend une saisie. Ajoutez <code>&lt;\/dev\/null<\/code> en fin de commande, ou tapez <code>Q<\/code> puis Entr\u00e9e pour quitter.<\/li>\n<li><strong>\u00ab unknown option -addext \u00bb sous une vieille version.<\/strong> L&#8217;option date d&#8217;OpenSSL 1.1.1. Mettez OpenSSL \u00e0 jour, ou passez par un fichier de configuration <code>openssl.cnf<\/code> avec une section <code>[v3_req]<\/code>.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"astuces-avancees\">Astuces avanc\u00e9es pour aller plus loin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Une fois les bases acquises, ces techniques acc\u00e9l\u00e8rent votre travail quotidien et renforcent vos automatisations.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Surveiller l&#8217;expiration en masse.<\/strong> Bouclez sur vos domaines avec <code>s_client<\/code> et <code>x509 -checkend 2592000<\/code> (qui renvoie un code d&#8217;erreur si le certificat expire dans moins de 30 jours) pour alerter en amont.<\/li>\n<li><strong>Tester localement avec <code>s_server<\/code>.<\/strong> Lancez <code>openssl s_server -accept 4433 -cert serveur.crt -key serveur.key -www<\/code> pour un serveur HTTPS de test instantan\u00e9, sans installer Nginx.<\/li>\n<li><strong>Mesurer la performance.<\/strong> <code>openssl speed rsa3072 ecdsap256<\/code> compare le d\u00e9bit des algorithmes sur votre mat\u00e9riel, utile pour dimensionner une passerelle.<\/li>\n<li><strong>Auditer une configuration TLS.<\/strong> Combinez <code>s_client<\/code> avec <code>-cipher<\/code> et diff\u00e9rentes options <code>-tls1_2<\/code> \/ <code>-tls1_3<\/code> pour v\u00e9rifier quels protocoles un serveur accepte encore.<\/li>\n<li><strong>Scripter avec des variables.<\/strong> Stockez le sujet et les SAN dans des variables d&#8217;environnement pour g\u00e9n\u00e9rer des dizaines de certificats de test reproductibles.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;\u00e9quipe du projet OpenSSL, dans son annonce de la version 3.5 du 8 avril 2025, pr\u00e9sente cette branche LTS comme une \u00e9tape majeure vers un Internet r\u00e9sistant au quantique. Adopter ces outils d\u00e8s maintenant, c&#8217;est anticiper une transition que l&#8217;ANSSI comme le NIST jugent in\u00e9vitable d&#8217;ici la fin de la d\u00e9cennie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">Foire aux questions sur OpenSSL<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quelle-version-dopenssl-utiliser-en-2026\">Quelle version d&#8217;OpenSSL utiliser en 2026 ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL 3.5 LTS, sortie le 8 avril 2025 et maintenue jusqu&#8217;en 2030, est le meilleur choix. Elle apporte le support post-quantique. La 3.0 LTS reste acceptable pour les commandes classiques, mais \u00e9vitez absolument toute version 1.x, en fin de vie depuis septembre 2023.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quelle-difference-entre-un-certificat-auto-signe-et-un-certificat-signe-par-une-ca\">Quelle diff\u00e9rence entre un certificat auto-sign\u00e9 et un certificat sign\u00e9 par une CA ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un certificat auto-sign\u00e9 est valid\u00e9 par sa propre cl\u00e9 : pratique pour le test et l&#8217;interne, mais rejet\u00e9 par les navigateurs car aucune autorit\u00e9 tierce ne garantit l&#8217;identit\u00e9. Un certificat sign\u00e9 par une autorit\u00e9 de certification (CA) reconnue, comme Let&#8217;s Encrypt, est automatiquement accept\u00e9 par les navigateurs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"rsa-ou-courbe-elliptique-que-choisir\">RSA ou courbe elliptique : que choisir ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un nouveau d\u00e9ploiement, privil\u00e9giez les courbes elliptiques (P-256 ou Ed25519) : cl\u00e9s plus petites, calculs plus rapides, s\u00e9curit\u00e9 \u00e9quivalente. RSA 3072 ou 4096 reste pertinent pour la compatibilit\u00e9 avec d&#8217;anciens syst\u00e8mes. Une cl\u00e9 P-256 (256 bits) \u00e9quivaut en robustesse \u00e0 RSA 3072.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"openssl-est-il-sur-face-aux-ordinateurs-quantiques\">OpenSSL est-il s\u00fbr face aux ordinateurs quantiques ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les algorithmes classiques (RSA, courbes elliptiques) sont vuln\u00e9rables \u00e0 un futur ordinateur quantique. OpenSSL 3.5 int\u00e8gre les algorithmes post-quantiques du NIST (ML-KEM, ML-DSA, SLH-DSA) pour anticiper cette menace. La meilleure pratique en 2026 est l&#8217;approche hybride, qui combine classique et post-quantique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pourquoi-mon-navigateur-refuse-t-il-mon-certificat-openssl\">Pourquoi mon navigateur refuse-t-il mon certificat OpenSSL ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Deux causes principales : le certificat est auto-sign\u00e9 (le navigateur ne conna\u00eet pas l&#8217;autorit\u00e9), ou il manque l&#8217;extension Subject Alternative Name (SAN). Ajoutez toujours <code>-addext \"subjectAltName=DNS:votre-domaine\"<\/code>, et pour un test, importez votre CA dans le magasin de confiance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-chiffrer-un-fichier-en-securite-avec-openssl\">Comment chiffrer un fichier en s\u00e9curit\u00e9 avec OpenSSL ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Utilisez <code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt -in fichier -out fichier.enc<\/code>. L&#8217;option <code>-pbkdf2<\/code> est indispensable : sans elle, la d\u00e9rivation de cl\u00e9 est trop faible. Pour un partage r\u00e9gulier de fichiers chiffr\u00e9s, GPG \u00e0 cl\u00e9 publique est souvent plus adapt\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"openssl-fonctionne-t-il-sous-windows\">OpenSSL fonctionne-t-il sous Windows ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui. Installez-le via <code>winget install ShiningLight.OpenSSL.Light<\/code> ou les binaires de la communaut\u00e9, puis lancez les m\u00eames commandes depuis PowerShell ou l&#8217;invite de commandes. Le format PKCS#12 (<code>.pfx<\/code>) facilite l&#8217;import des certificats dans le magasin Windows et IIS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"openssl-a-t-il-connu-des-failles-de-securite-recentes\">OpenSSL a-t-il connu des failles de s\u00e9curit\u00e9 r\u00e9centes ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comme tout logiciel de cette ampleur, OpenSSL corrige r\u00e9guli\u00e8rement des vuln\u00e9rabilit\u00e9s via ses mises \u00e0 jour. C&#8217;est pr\u00e9cis\u00e9ment pourquoi il faut rester sur une branche maintenue (3.5 LTS ou 3.0 LTS) et appliquer les correctifs d\u00e8s leur publication, en suivant les avis officiels du projet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"related-coverage\">Pour aller plus loin (Related Coverage)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/https-et-tls\/\">HTTPS et TLS : comment votre connexion est prot\u00e9g\u00e9e<\/a><\/li>\n<li><a href=\"\/signatures-numeriques\/\">Signatures num\u00e9riques : hachage, cl\u00e9s et authenticit\u00e9<\/a><\/li>\n<li><a href=\"\/sha-256\/\">SHA-256 expliqu\u00e9 : l&#8217;empreinte de 256 bits qui s\u00e9curise le web<\/a><\/li>\n<li><a href=\"\/certificat-ssl-certbot-nginx\/\">Certificat SSL gratuit avec Certbot et Nginx : 11 \u00e9tapes<\/a><\/li>\n<li><a href=\"\/chiffrer-fichier-gpg-tutoriel\/\">GPG : chiffrer fichiers et emails en 12 \u00e9tapes<\/a><\/li>\n<li><a href=\"\/hmac-sha256-nodejs\/\">HMAC-SHA256 en Node.js : signer une API en 12 \u00e9tapes<\/a><\/li>\n<li><a href=\"\/cryptography-hub\/\">Cryptographie et fonctions de hachage : le socle de la confiance num\u00e9rique<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">L&#8217;essentiel \u00e0 retenir sur OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vous savez d\u00e9sormais g\u00e9n\u00e9rer des cl\u00e9s RSA et elliptiques robustes, fabriquer des certificats avec SAN, produire et v\u00e9rifier des CSR, inspecter un certificat local ou distant, chiffrer des fichiers avec AES-256 et PBKDF2, signer des documents et construire une mini-PKI compl\u00e8te. Ces douze \u00e9tapes couvrent l&#8217;essentiel des besoins quotidiens en cryptographie appliqu\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trois r\u00e9flexes \u00e0 conserver : restez sur une branche maintenue (OpenSSL 3.5 LTS de pr\u00e9f\u00e9rence), bannissez les algorithmes obsol\u00e8tes (RSA 1024, SHA-1, chiffrement sans PBKDF2), et prot\u00e9gez toujours vos cl\u00e9s priv\u00e9es par des permissions strictes. Pour la suite, explorez la cryptographie post-quantique d&#8217;OpenSSL 3.5, l&#8217;avenir de la s\u00e9curit\u00e9 du transport se joue d\u00e9j\u00e0 aujourd&#8217;hui.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sources et r\u00e9f\u00e9rences :<\/strong> la <a href=\"https:\/\/docs.openssl.org\/3.5\/man1\/openssl\/\" target=\"_blank\" rel=\"noopener\">documentation OpenSSL 3.5<\/a>, le <a href=\"https:\/\/openssl-library.org\/post\/2025-04-08-openssl-35-final-release\/\" target=\"_blank\" rel=\"noopener\">communiqu\u00e9 de sortie de la version 3.5<\/a>, la <a href=\"https:\/\/www.openssl.org\/policies\/releasestrat.html\" target=\"_blank\" rel=\"noopener\">politique de versions du projet<\/a>, et les normes post-quantiques du NIST <a href=\"https:\/\/csrc.nist.gov\/pubs\/fips\/203\/final\" target=\"_blank\" rel=\"noopener\">FIPS 203<\/a> et <a href=\"https:\/\/csrc.nist.gov\/pubs\/fips\/204\/final\" target=\"_blank\" rel=\"noopener\">FIPS 204<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenSSL \u00e9quipe la quasi-totalit\u00e9 des serveurs web, des conteneurs et des objets connect\u00e9s de la plan\u00e8te. C&#8217;est l&#8217;outil qui g\u00e9n\u00e8re vos cl\u00e9s, fabrique vos certificats TLS, chiffre vos fichiers et\u2026<\/p>\n","protected":false},"author":4,"featured_media":172,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,2],"tags":[],"class_list":["post-171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-10","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/comments?post=171"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/171\/revisions"}],"predecessor-version":[{"id":173,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/171\/revisions\/173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media\/172"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media?parent=171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/categories?post=171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/tags?post=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}