Comment créer une demande de signature de certificat (CSR) avec OpenSSL : guide pratique

La sécurisation d’un site web ou d’une application repose sur un fondement technique souvent méconnu : la demande de signature de certificat (CSR), étape préalable indispensable à l’obtention d’un certificat SSL. Sans cette demande, aucune autorité de certification ne peut générer le certificat qui protègera les échanges entre les clients et le serveur via le protocole TLS. OpenSSL, l’outil de référence en matière de gestion des certificats et des clés cryptographiques, permet de créer cette CSR en quelques commandes, mais cette apparente simplicité cache des paramètres critiques qu’il convient de maîtriser pour éviter des erreurs de configuration onéreuses.

Miniature vidéo YouTube


Comprendre la demande de signature de certificat et son rôle dans l’écosystème SSL/TLS 🔐

Une demande de signature de certificat (CSR) contient la clé publique et l’identité du demandeur, permettant à une autorité de certification de vérifier ces informations avant de délivrer un certificat SSL/TLS qui authentifie et chiffre les échanges entre serveur et clients.

La demande de signature de certificat (CSR pour Certificate Signing Request) représente bien plus qu’un simple fichier texte : il s’agit d’une structure formalisée contenant la clé publique nouvellement générée ainsi que l’identité de l’entité qui demande le certificat. Cette demande est chiffrée avec la clé privée correspondante, ce qui garantit son authenticité auprès de l’autorité de certification. Le CSR joue le rôle d’intermédiaire entre le serveur applicatif et l’autorité de certification, permettant à celle-ci de valider que la clé privée reste bien en possession du demandeur.

Lors du processus d’acquisition d’un certificat SSL, l’autorité de certification reçoit le CSR et procède à sa signature avec sa propre clé privée. Cette opération transforme la demande en certificat valide, liant cryptographiquement la clé publique à l’identité vérifiée du domaine. Le certificat final est ensuite installé sur le serveur Web aux côtés de la clé privée, créant ainsi une paire asymétrique permettant de chiffrer les communications HTTPS. Sans le CSR correctement formé, le processus d’émission du certificat s’interrompt, bloquant la mise en place du protocole TLS sécurisé.

Il importe de comprendre que le CSR contient des informations sensibles concernant l’entité demandeure : pays, organisation, unité organisationnelle, nom commun (le domaine), adresse électronique. Ces données doivent correspondre exactement au contexte du certificat demandé, particulièrement le nom commun qui doit matcher le nom de domaine utilisé pour accéder au service. Une divergence entre le CSR et l’usage réel du domaine entraîne une alerte de sécurité chez le navigateur client, remettant en question la confiance accordée au certificat.

Les composants essentiels du CSR et leur signification 📋

Un CSR bien structuré regroupe plusieurs champs obligatoires et optionnels. Le champ Common Name (CN) mérite une attention particulière, car il désigne le nom d’hôte ou de domaine principal pour lequel le certificat est demandé. Pour un site web utilisant « exemple.fr », le CN doit correspondre exactement à ce domaine. Toute confusion à ce stade compromet la validité du certificat lors de son utilisation en production.

Au-delà du CN, le CSR inclut des informations organisationnelles : le pays (C pour Country), l’État ou province (ST), la localité (L), l’organisation (O) et l’unité organisationnelle (OU). Ces éléments apparaissent dans le certificat final et peuvent être inspectés par les utilisateurs souhaitant vérifier l’authenticité du site visité. La pertinence et l’exactitude de ces données renforcent la crédibilité du certificat auprès des visiteurs.

Depuis quelques années, les certificats modernes intègrent également les Subject Alternative Names (SANs), permettant de protéger plusieurs domaines ou sous-domaines au moyen d’un seul certificat. Lors de la génération du CSR via OpenSSL, il est possible de spécifier ces SANs directement en ligne de commande ou via un fichier de configuration, facilitant ainsi la création de certificats multi-domaine sans étapes supplémentaires.

🛠️ Astuce

Pour éviter toute erreur lors de la création du CSR, préparez à l’avance toutes les informations nécessaires : nom du domaine exact, nom de l’organisation, ville, pays et adresse email. Cela vous fera gagner du temps au moment des invites OpenSSL.

Miniature vidéo YouTube


Préparer l’environnement et générer la clé privée avec OpenSSL 🛠️

Avant de générer un CSR, il faut installer OpenSSL, choisir un répertoire sécurisé, puis lancer la commande « openssl req -sha256 -nodes -newkey rsa:2048 -keyout domaine.fr.key -out domaine.fr.csr » pour créer la clé privée et la demande de certificat.

Avant de créer un CSR, il convient de vérifier que OpenSSL est installé sur le système. Sur les distributions Linux modernes, OpenSSL figure généralement parmi les outils préinstallés. Depuis la ligne de commande, la vérification s’effectue simplement : openssl version affiche le numéro de version et confirme la disponibilité de l’outil. Sur les systèmes Windows, OpenSSL peut être installé indépendamment ou via WSL (Windows Subsystem for Linux), offrant une expérience similaire à celle des environnements Unix.

L’emplacement de travail revêt une importance pratique. Par convention, les certificats et clés sont stockés dans le répertoire /etc/ssl/certs sur Linux, un dossier protégé auquel seul l’administrateur système accède. Pour des raisons de sécurité et d’organisation, il est recommandé de désigner un dossier spécifique au projet, en veillant à ce que seuls les administrateurs autorisés possèdent les droits de lecture et d’exécution. La commande cd /etc/ssl/certs permet de naviguer vers le répertoire approprié avant de lancer la génération.

La génération de la clé privée et du CSR peut s’effectuer en deux étapes distinctes ou en une seule commande combinée. L’approche unifiée, plus fréquente, utilise la commande suivante : sudo openssl req -sha256 -nodes -newkey rsa:2048 -keyout domaine.fr.key -out domaine.fr.csr. Cette commande englobe la création d’une paire de clés RSA de 2048 bits, la génération du CSR et la sauvegarde de ces éléments dans deux fichiers distincts.

Certains paramètres méritent une explicitation. L’option -sha256 spécifie l’algorithme de hachage utilisé pour signer le CSR, SHA-256 étant le standard moderne remplaçant les anciens SHA-1. L’option -nodes indique qu’aucune passphrase ne protègera la clé privée, facilitant l’automatisation mais compromettant légèrement la sécurité. Pour les environnements critiques, l’omission de cette option force OpenSSL à demander une passphrase, ajoutant une couche de protection supplémentaire contre l’accès non autorisé à la clé.

Les étapes interactives de remplissage des informations de certificat ✍️

Lors de l’exécution de la commande de génération, OpenSSL lance une série de questions concernant l’identité du demandeur. Ces invites attendues sont : Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit Name, Common Name et Email Address. Le processus guide l’utilisateur pas à pas, affichant des suggestions entre crochets que l’on peut accepter en appuyant simplement sur Entrée.

La question relative au Common Name demande une vigilance accrue. Si le certificat vise à sécuriser un site web accessible via « domaine.fr », le CN doit être strictement « domaine.fr ». Toute variante telle que « www.domaine.fr » ou « example.fr » provoquera une incompatibilité entre le certificat et le domaine d’accès, générant des avertissements de sécurité chez les navigateurs. Les validateurs de certificats modernes effectuent des vérifications strictes sur ce champ, refusant les certificats dont le CN ne correspond pas au domaine demandé.

Après la saisie du dernier champ, OpenSSL génère automatiquement les deux fichiers : domaine.fr.key (la clé privée) et domaine.fr.csr (la demande de signature de certificat). La clé privée est un secret à protéger jalousement, jamais transmis à l’autorité de certification. Le CSR, au contraire, est destiné à être envoyé à l’autorité pour signature. Cette distinction est fondamentale pour maintenir l’intégrité de la sécurité asymétrique.

Générer et valider le CSR avec OpenSSL en pratique 🔍

Après la création du CSR avec OpenSSL, il est recommandé de vérifier l’existence des fichiers générés puis de décoder le CSR avec « openssl req -in domaine.fr.csr -noout -text » afin de valider les informations avant envoi à l’autorité de certification.

Une fois la génération terminée, il convient de vérifier que les fichiers ont bien été créés. La commande ls domaine.fr.* affiche les fichiers correspondants, confirmant le succès de l’opération. Le contenu du CSR peut être consulté via cat domaine.fr.csr, révélant une structure encodée en Base64 commençant par « —–BEGIN CERTIFICATE REQUEST—– » et se terminant par « —–END CERTIFICATE REQUEST—–« . Cette présentation est standard et attendue.

Pour décoder et inspecter les informations contenues dans le CSR en format lisible, la commande openssl req -in domaine.fr.csr -noout -text déchiffre le contenu et le présente sous forme textuelle. L’affichage détaille le sujet (Subject), la clé publique, la signature, et tous les éléments fournis lors des questions interactives. Cette vérification pré-soumission permet de corriger d’éventuelles erreurs de saisie avant d’envoyer la demande à l’autorité de certification, évitant des délais inutiles et des rejets administratifs.

L’inspection du CSR révèle également le type et la taille de la clé générée. Un certificat RSA:2048 affiche une clé de 2048 bits, tandis que les configurations modernes peuvent utiliser RSA:4096 pour une sécurité accrue ou ECC (Elliptic Curve Cryptography) pour une efficacité computationnelle supérieure. Ces détails techniques ne sont visibles que lors de l’inspection du CSR, justifiant l’importance de cette étape de validation.

Les erreurs courantes à éviter lors de la création du CSR ⚠️

L’une des erreurs les plus fréquemment commises concerne la confusion entre la clé privée et le CSR. Certains administrateurs transmis accidentellement la clé privée à l’autorité de certification au lieu du CSR. Cette méprise compromet irrémédiablement la sécurité du certificat, car la clé privée ne doit jamais quitter le serveur. Si cet incident survient, l’unique remède consiste à révoquer le certificat et à regénérer une nouvelle paire clé-CSR.

Une deuxième source d’erreurs réside dans le mélange des paramètres de chiffrement. Mélanger des clés RSA et ECC lors de la génération ou utiliser un algorithme de hachage obsolète (SHA-1) peut causer des incompatibilités avec les serveurs Web modernes ou des refus de signature par les autorités de certification contemporaines. Les paramètres recommandés en 2026 incluent RSA:2048 ou supérieur, ou ECC:P-256 ou P-384, associés à SHA-256 au minimum.

La confusion du nom de domaine dans le Common Name représente une erreur impossible à corriger après soumission. Le CSR doit être régénéré intégralement si le CN est incorrect. Cela explique pourquoi une double vérification du CN avant l’envoi est essentielle, économisant des jours de rétention administrative auprès de l’autorité de certification.

Configurations avancées : SANs, clés ECC et optimisations de sécurité 🔐

Pour générer un CSR avec plusieurs SANs ou une clé ECC dans OpenSSL, utilisez l’option -addext pour les SANs ou créez d’abord une clé ECC avec « openssl ecparam », puis générez le CSR en spécifiant la clé et les extensions souhaitées.

Les certificats mono-domaine, bien que fonctionnels, présentent des limitations pour les environnements hébergeant plusieurs sous-domaines ou domaines apparentés. Les Subject Alternative Names (SANs) permettent d’inclure plusieurs noms d’hôtes dans un seul certificat, réduisant les coûts et simplifiant la gestion. Pour générer un CSR avec SANs directement via OpenSSL, deux approches existent : la ligne de commande avec l’option -addext ou un fichier de configuration spécifique.

La syntaxe de la ligne de commande pour ajouter des SANs s’effectue ainsi : openssl req -new -newkey rsa:2048 -nodes -keyout domaine.fr.key -out domaine.fr.csr -addext "subjectAltName=DNS:domaine.fr,DNS:www.domaine.fr,DNS:api.domaine.fr". Cette approche consolide les domaines multiples en une seule demande, que l’autorité de certification traitera comme un ensemble cohérent. Les navigateurs reconnaissent tous ces noms comme valides pour le certificat, éliminant les avertissements de mismatch.

Au-delà de RSA, les clés ECC (Elliptic Curve Cryptography) gagnent en popularité. Elles offrent une sécurité équivalente avec des clés plus courtes et un traitement plus rapide. La génération d’un CSR avec une clé ECC utilise openssl ecparam -name prime256v1 -genkey -noout -out domaine.fr.key suivi de openssl req -new -key domaine.fr.key -out domaine.fr.csr. Cette combinaison génère une paire ECC, plus légère et tout aussi robuste que RSA:2048.

Utilisation d’un fichier de configuration pour automatiser les paramètres 📄

Pour les environnements où la génération de CSR s’effectue régulièrement ou de façon automatisée, un fichier de configuration OpenSSL simplifie et standardise le processus. Un fichier nommé san.conf peut contenir l’ensemble des paramètres, y compris les SANs, évitant l’interaction manuelle. La structure type inclut une section [req] définissant les paramètres par défaut et une section [alt_names] énumérant les domaines alternatifs.

Exemple minimal de configuration :

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
C=FR
ST=Île-de-France
L=Paris
O=Entreprise
OU=IT
CN=domaine.fr

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1=domaine.fr
DNS.2=www.domaine.fr
DNS.3=api.domaine.fr

Cette configuration, stockée dans un fichier, permet de générer le CSR sans interactions utilisateur : openssl req -new -config san.conf -keyout domaine.fr.key -out domaine.fr.csr. L’automatisation facilite l’intégration dans des pipelines CI/CD ou des scripts de déploiement, garantissant la cohérence entre les paramètres définis et les CSR générés.

Considérations de sécurité concernant la clé privée et son stockage 🔒

La clé privée, une fois générée, doit être traitée avec le plus haut degré de confidentialité. Les permissions d’accès au fichier domaine.fr.key doivent être restrictives, idéalement 600 (lecture/écriture pour le propriétaire uniquement). La commande chmod 600 domaine.fr.key assure que seul le propriétaire du fichier peut le consulter, bloquant tout accès par d’autres utilisateurs ou processus.

Pour les environnements hautement sécurisés, le chiffrement de la clé privée via une passphrase ajoute une couche supplémentaire. Lors de la génération, l’omission de l’option -nodes force OpenSSL à demander une passphrase, créant une clé protégée au repos. Cette approche accepte une perte de performance mineure (déchiffrement de la clé à chaque démarrage du serveur) en échange d’une protection accrue contre les accès non autorisés physiques au disque dur.

La rotation des clés et la révocation des certificats compromis font partie des bonnes pratiques. Bien qu’un certificat soit valide pendant une période définie (généralement 1 à 2 ans), il est recommandé de les renouveler plus fréquemment, tous les 90 jours dans le cas de Let’s Encrypt par exemple, pour minimiser les risques en cas de compromission. Cette cadence s’appuie sur le principe de durée de vie minimale, réduisant l’impact potentiel d’une clé volée.

🌟 Bon à savoir

Let’s Encrypt propose des certificats gratuits valables 90 jours. L’automatisation du renouvellement avec des outils comme Certbot limite tout risque d’expiration accidentelle du certificat.

La génération d’une demande de signature de certificat (CSR) avec OpenSSL implique la création d’une clé privée et d’un fichier CSR correctement renseigné. Ce fichier structure les données d’identité, dont le nom de domaine (Common Name), l’organisation, le pays et les SANs si nécessaire. Une CSR bien formée accélère l’émission du certificat SSL/TLS et garantit la fiabilité du chiffrement. La génération d’une demande de signature de certificat (CSR) avec OpenSSL implique la création d’une clé privée et d’un fichier CSR correctement renseigné

Intégration du CSR dans le flux de déploiement et obtention du certificat 🚀

Le CSR doit être soumis à l’autorité de certification qui vérifie le contrôle du domaine, signe la demande, puis fournit le certificat final à installer avec la clé privée sur le serveur pour activer le chiffrement TLS.

Une fois validé et préparé, le CSR est transmis à l’autorité de certification choisie. Le contenu complet du fichier CSR, entre « —–BEGIN CERTIFICATE REQUEST—– » et « —–END CERTIFICATE REQUEST—–« , est copié et collé dans le formulaire de demande de l’autorité. Certains prestataires acceptent également le téléchargement direct du fichier .csr, offrant une interface utilisateur plus pratique. La transmission sécurisée (via HTTPS) du CSR garantit son intégrité en transit.

L’autorité de certification procède à la vérification du domaine, généralement via une validation DNS, email ou HTTP(S). Cette étape confirme que le demandeur contrôle effectivement le domaine spécifié dans le CSR, prévenant l’émission frauduleuse de certificats pour des domaines tiers. Une fois la validation franchie, l’autorité signe le CSR avec sa propre clé privée, générant un certificat signé qui sera fourni au demandeur.

Le certificat retourné par l’autorité (généralement au format .crt ou .pem) doit être installé sur le serveur Web aux côtés de la clé privée. Le binôme clé-certificat constitue la paire asymétrique fonctionnant selon le protocole TLS. Le serveur utilise la clé privée pour déchiffrer les requêtes clients et le certificat pour s’authentifier auprès d’eux. Aucune modification du CSR ou de la clé n’est possible après cette installation ; toute modification nécessite une nouvelle génération intégrale.

Vérification post-installation et tests de validité 🧪

Après l’installation du certificat sur le serveur, il est judicieux de vérifier sa validité via des outils de test externes. Des services comme SSL Labs, DigiCert ou des vérificateurs en ligne permettent de scanner le serveur et d’effectuer un diagnostic complet du certificat, de la chaîne de confiance et de la configuration TLS. Ces tests révèlent des problèmes tels que des certificats autosignés, des chaînes incomplètes ou des protocoles obsolètes.

Localement, la commande openssl s_client -connect domaine.fr:443 établit une connexion TLS vers le serveur et affiche le certificat en cours d’utilisation. L’inspection des champs « Subject » et « Issuer » confirme que le certificat demandé par l’autorité de certification est correctement déployé. Les dates « Not Before » et « Not After » indiquent la validité temporelle du certificat, permettant d’anticiper les renouvellements nécessaires.

La chaîne de certificats, ou « chain », mérite une attention particulière. Pour que les navigateurs acceptent le certificat sans avertissement, la chaîne complète reliant le certificat du serveur à une autorité racine de confiance doit être fournie. Certaines autorités de certification fournissent un certificat intermédiaire qui doit être installé en parallèle du certificat serveur. L’omission de ce certificat intermédiaire génère des erreurs de validation de chaîne, même si le certificat principal est valide.

Maintenance et renouvellement des certificats dans les cycles de vie longs ♻️

Les certificats possèdent une durée de vie finie, généralement de 1 à 3 ans selon le type et l’autorité émettrice. La planification du renouvellement doit débuter au moins 3 mois avant l’expiration pour éviter les interruptions de service. La génération d’un nouveau CSR utilise la même méthodologie, avec possibilité de réutiliser les mêmes paramètres domaine si rien n’a changé.

Pour les environnements à haute disponibilité, l’utilisation de certificats wildcard (couvrant tous les sous-domaines d’un domaine principal) ou de certificats multi-domaine (SAN) simplifie la maintenance en consolidant plusieurs domaines sous une seule demande de renouvellement. Ces approches réduisent les opérations manuelles et minimisent les risques de certificats oubliés ou expirés.

🔑 Type de Certificat🎯 Cas d’Usage⏱️ Durée Typique💰 Coût
Certificat mono-domaineSite unique, un seul nom d’hôte1 à 3 ansGratuit à quelques euros
Certificat wildcardMultiples sous-domaines d’un même domaine1 à 3 ansModéré
Certificat multi-domaine (SAN)Plusieurs domaines indépendants1 à 3 ansModéré à élevé
Certificat EV (Extended Validation)E-commerce, confiance maximale1 à 2 ansÉlevé

La liste suivante énumère les bonnes pratiques essentielles lors du cycle de vie complet d’un certificat : 📌

  • 🔒 Générer un nouveau CSR pour chaque renouvellement, jamais réutiliser un ancien CSR expiré
  • 📋 Documenter toutes les informations du certificat (CN, SANs, domaine, autorité émettrice) dans un registre centralisé
  • 🔐 Sauvegarder les clés privées dans un endroit sécurisé, hors accès public (coffre-fort numérique ou HSM)
  • ⚙️ Automatiser le renouvellement via des services comme Let’s Encrypt ou des scripts de CI/CD
  • 🧪 Tester chaque certificat après installation via des validateurs en ligne ou des outils locaux
  • 📢 Mettre en alerte les administrateurs 90, 60 et 30 jours avant l’expiration du certificat
  • 🔄 Implémenter une politique de rotation des clés tous les 2 ans maximum, même si le certificat reste valide

Le recours à des autorités de certification réputées et l’adoption de certificats offerts gratuitement par des services tels que Let’s Encrypt ont démocratisé l’accès au chiffrement TLS. Cependant, la rigueur dans la génération du CSR et la gestion des clés privées reste un prérequis immuable, indépendamment du coût ou du prestige de l’autorité choisie. La sécurité ne réside pas dans le certificat lui-même, mais dans la confiance accordée à la clé privée qui le sous-tend.

La maîtrise d’OpenSSL et du processus complet de création de CSR constitue une compétence fondamentale pour tout administrateur système ou DevOps responsable de la sécurité des communications web. En appliquant méthodiquement ces étapes et en évitant les pièges communs, l’installation d’une infrastructure TLS robuste et fiable devient une affaire de procédures bien documentées plutôt qu’une épreuve technique mystérieuse.

Retour en haut