Générer une demande de certificat (CSR) avec OpenSSL
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment générer un CSR avec OpenSSL sous Linux, afin de pouvoir faire une demande de certificat SSL.
Il m'arrive assez régulièrement de commander des certificats SSL, qui sont ensuite mis en place sur des serveurs Web pour utiliser le protocole HTTPS afin d'accéder à des applications Web ou des sites Web. Pendant le processus d'achat du certificat SSL, il est demandé de préciser le CSR, c'est-à-dire les informations associées à la demande de certificat. Sans le CSR, la demande de certificat ne pourra pas aboutir. La création du CSR sera associée à la génération d'une clé privée, qu'il faudra conserver sur le serveur qui héberge l'application Web.
Après une présentation de cette notion de CSR, nous verrons comment générer une demande de certificat. Pour ma part, je vais utiliser une machine sous Linux pour utiliser OpenSSL même si l'on pourrait l'installer sous Windows, ou passer par WSL.
II. À quoi sert la demande de signature de certificat ?
Par l'intermédiaire d'OpenSSL, nous allons générer une clé publique ainsi que la clé privée associée. Grâce à cette clé privée, nous allons pouvoir signer la demande de certificat, ce qui sera utile pour l'autorité de certification. Cette demande de certificat contiendra la clé publique ainsi que des informations sur l'entité à l'origine de la demande, notamment les coordonnées, ainsi que le nom de l'hôte ou du domaine. Le terme "demande de certificat" correspond en fait à une demande de signature de certificat : CSR pour Certificate Signing Request.
Ensuite, l'autorité de certification va signer le CSR avec sa propre clé privée afin de donner lieu au certificat final qu'il faudra déployer sur le site Web.
Pour approfondir le sujet du HTTPS et des certificats, je vous recommande de lire cet article : du HTTP au HTTPS.
III. Générer un CSR avec OpenSSL
Tout d'abord, connectez-vous à votre serveur en SSH ou en console directement. Sous Linux, l'emplacement par défaut où sont stockés les certificats est le répertoire "/etc/ssl/certs", donc je vais utiliser ce répertoire dans le cadre de cet exemple. Commençons par se positionner dans ce répertoire :
cd /etc/ssl/certs
Une fois dans ce dossier, nous allons utiliser OpenSSL pour générer une nouvelle clé privée et une demande de certificat associée. Le CSR sera transmis à l'autorité de certification qui doit nous fournir le certificat SSL, tandis que la clé privée restera sur le serveur Web. En général, on génère le CSR depuis l'hôte qui va recevoir le certificat au final, mais ce n'est pas obligatoire.
Voici la commande à exécuter :
sudo openssl req -sha256 -nodes -newkey rsa:2048 -keyout domaine.fr.key -out domaine.fr.csr
Cette commande va créer deux fichiers :
- La clé privée RSA domaine.fr.key de 2048 bits (taille de la clé)
- Le CSR domaine.fr.csr
Vous pouvez utiliser d'autres noms pour les fichiers, mais je vous recommande de préciser le nom de domaine (ou le nom d'hôte selon l'usage) afin que ce soit parlant. Lorsque l'on va exécuter cette commande, les deux fichiers ne seront pas générés immédiatement. En effet, il faudra répondre à une série de questions afin d'indiquer le pays, le nom de l'entreprise, etc... Ces informations seront visibles dans le certificat final.
Vous devez être vigilant au moment où la question "Common Name (e.g. server FQDN or YOUR name)" s'affiche ! Si vous générez un certificat pour un site Web (ou une application Web), il est impératif que le nom de domaine que vous indiquez corresponde au nom de domaine utilisé par le site Web qui va bénéficier de ce certificat.
Par exemple avec "domaine.fr" :
À la fin du processus, on peut vérifier l'existence des deux fichiers avec la commande suivante :
ls domaine.fr.*
Puis, on peut afficher le contenu de notre demande de certificat :
cat domaine.fr.csr
Avant de transmettre la demande à l'autorité de certification, vous pouvez vérifier les informations contenues dans le CSR, si vous le souhaitez. Ce n'est pas obligatoire, mais cela pourra rassurer certaines personnes. Pour cela, on utilise encore OpenSSL, en précisant en entrée le fichier CSR précédemment généré :
openssl req -in domaine.fr.csr -noout -text
On obtient, par exemple :
Votre demande de certificat est prête ! Copiez l'intégralité de la sortie, y compris la première et la dernière ligne, et fournissez cette information à l'autorité de certificat auprès de laquelle vous demandez votre certificat SSL. Ensuite, le processus va pouvoir aboutir et votre certificat sera généré ! 🙂
Thank you best answer for SSL question
Bonjour, connaissez-vous le moyen de transmettre un fichier texte contenant le pays, le nom de l’entreprise, etc… pour obtenir directement la demande de certificat sans passer par les étapes de réponse aux différentes questions ?
Cordialement
[email protected]