
Guide ultime OpenSSL : créer vos certificats SSL autogérés
Aujourd’hui, les certificats SSL sont indispensables pour assurer la sécurité des sites Web et renforcer la confiance des utilisateurs. En chiffrant les communications entre le navigateur de l’utilisateur et le serveur Web, ils garantissent que les données échangées restent confidentielles et protégées contre les interceptions malveillantes. De plus, la présence d’un certificat SSL améliore la crédibilité d’un site Web, car les utilisateurs, de plus en plus sensibilisés à l’importance de la sécurité en ligne, sont plus enclins à faire confiance à un site sécurisé par SSL.
Dans ce guide ultime, nous allons explorer comment créer et gérer vos propres certificats SSL autogérés avec OpenSSL pour une infrastructure isolée, de test ou de développement.
Pourquoi les certificats SSL sont-ils importants ?
Un certificat SSL est un fichier contenant des données cryptographiques qui permettent d’attester de l’identité d’une entité, tout en permettant de chiffrer ou de signer des données.
Ces caractéristiques de sécurité de base nous permettent d’attribuer différents rôles aux certificats SSL, dont les plus connus sont :
- Chiffrement des données : nous l’avons déjà mentionné, les certificats SSL permettent de chiffrer les données échangées sur le réseau via un socket sécurisé. Ces sockets appliquent un protocole de chiffrement TLS (Transport Layer Security) ou SSL (Secure Sockets Layer) pour garantir la confidentialité des données.
- Délivrance de certificats SSL : Les certificats SSL fonctionnent en arbre de confiance, où les certificats racine signent les certificats intermédiaires ou finaux. Ce rôle de signature est assuré par une autorité de certification (CA).
- Authentification des entités : Les certificats SSL permettent d’authentifier l’identité d’une entité, qu’il s’agisse d’un serveur Web, d’un utilisateur ou d’une application. Cette authentification est réalisée en vérifiant la signature du certificat par une autorité de certification de confiance.
L’autorité de certification (CA)
Qu’est-ce qu’une autorité de certification ?
L’autorité de certification (CA) est une entité de confiance qui délivre des certificats SSL aux entités qui en font la demande. Les CA sont responsables de la vérification de l’identité des demandeurs de certificats, de la signature des certificats et de la publication des certificats dans des répertoires publics.
Il existe de nombreuses autorités de certification commerciales qui délivrent des certificats SSL payants. Les hébergeurs Web proposent souvent des certificats SSL gratuits via des partenariats avec des CA reconnues telles que Let’s Encrypt ou DigiCert.
Cependant, il est également possible de créer ses propres certificats SSL autogérés pour une utilisation interne ou de test. Ces certificats ne sont pas signés par une autorité de certification de confiance, mais ils peuvent être utilisés pour chiffrer les communications sur un réseau isolé ou pour tester des applications en local. Dans ce cas, ce certificat CA est appelé une autorité de certification racine auto-signée.
Comment créer une autorité de certification racine auto-signée avec OpenSSL ?
Sur un environnement Linux/macOS, il est possible de créer une autorité de certification racine auto-signée en utilisant l’outil OpenSSL. Voici la commande à exécuter pour générer un certificat SSL auto-signé racine :
$ openssl req -x509 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 9125 -nodes -subj "/C=FR/O=My Company/CN=My Company CA"
Generating a RSA private key
..........................++++
.....................................++++
writing new private key to 'ca.key'
-----
Cette unique commande génère une clé privée et un certificat SSL auto-signé utilisables en tant qu’autorité de certification racine. La clé privée est stockée dans le fichier ca.key
, mais elle n’est pas protégée par un mot de passe (l’option -nodes
permet d’éviter le chiffrement de la clé privée). Quant au certificat SSL ca.crt
, il est valable pour 25 ans (9125 jours) et contient les informations suivantes (spécifiées par l’option -subj
) :
- Pays : FR (France)
- Organisation : My Company
- Nom commun : My Company CA
Protéger la clé privée de l’autorité de certification racine
Les deux fichiers générés avec openssl
(ca.key
et ca.crt
) sont les éléments essentiels pour créer des certificats SSL autogérés. Nous en aurons besoin à chaque fois que nous voudrons signer un nouveau certificat.
Cela signifie également que ces fichiers sont critiques pour la sécurité de l’infrastructure. En effet, la clé privée de l’autorité de certification racine est la clé maîtresse qui permet de signer tous les certificats de l’infrastructure. Si cette clé est compromise, tous les certificats signés par cette autorité de certification deviennent invalides. Par conséquent, il est essentiel de protéger la clé privée de l’autorité de certification racine en la stockant dans un endroit sûr et en limitant l’accès aux personnes autorisées.
Créer des certificats SSL avec votre autorité de certification et OpenSSL
La procédure de création de certificats SSL avec votre propre autorité de certification est relativement simple. Elle suit les étapes suivantes :
- Génération de la clé privée : Le demandeur génère une clé privée (généralement au format RSA) qui peut être conservée tant qu’elle n’est pas compromise.
- Création de la Certificate Signing Request (CSR) : Le demandeur génère une CSR qui contient les informations nécessaires pour créer un certificat SSL.
- Signature du certificat SSL : L’autorité de certification génère le certificat SSL à partir des informations contenues dans la CSR et le signe avec sa clé privée.
Générer une clé privée avec OpenSSL
Nous l’avons vu pour l’autorité de certification racine, nous allons utiliser OpenSSL pour générer une clé privée RSA. Voici la commande à exécuter pour la générer :
$ openssl genrsa -out internal.lavoiedudev.com.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................+++++
........................+++++
e is 65537 (0x010001)
Générer une Certificate Signing Request (CSR) avec OpenSSL
La seconde étape consiste à générer une Certificate Signing Request (CSR) qui contient les informations nécessaires à la création du certificat SSL.
CSR commune pour un serveur Web
Selon le cas d’utilisation, une CSR peut être configurée avec plus ou moins d’informations. Dans le cas d’un serveur Web, la commande OpenSSL suivante est suffisante :
$ openssl req -new -key internal.lavoiedudev.com.key -out internal.lavoiedudev.com.csr -subj "/CN=*.internal.lavoiedudev.com"
$ openssl req -in internal.lavoiedudev.com.csr -noout -text
Certificate Request:
Data:
Version: 1 (0x0)
Subject: CN = *.internal.lavoiedudev.com <1>
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:a1:8c:68:28:e1:d3:d2:b3:b0:36:ce:c8:14:33:
...
Le champ CN
(Common Name) correspond au nom de domaine fourni lors de la création de la CSR.
Lorsque nous voulons obtenir un certificat SSL pour un serveur (Web, base de données, etc.), le champ CN
de la CSR doit correspondre au nom du domaine du serveur. Dans l’exemple ci-dessus, le champ CN
est défini sur *.internal.lavoiedudev.com
, ce qui signifie que le certificat SSL sera valide pour tous les sous-domaines de internal.lavoiedudev.com
.
CSR avancée pour d’autres cas d’utilisation
Par défaut, la ligne de commande openssl req
génère une CSR avec des informations minimales permettant de créer un certificat SSL. Cependant, il est possible de spécifier des informations supplémentaires en utilisant des fichiers de configuration. Il est notamment possible de :
- Spécifier plusieurs noms de domaine (SAN) ou adresses IP pour un certificat SSL.
- Créer des certificats SSL pour l’authentification client.
- Créer des certificats SSL dédiés à des usages spécifiques (signature de code, chiffrement de courriels, etc.).
Qu’importe le cas d’utilisation, la ligne de commande openssl req
à utiliser est la suivante :
$ openssl req -new -key internal.lavoiedudev.com.key -out internal.lavoiedudev.com.csr -config csr.conf <1>
Nous verrons plus loin comment créer un fichier de configuration pour une CSR avancée.
Créer un fichier de configuration pour un DNS alternatif ou une adresse IP
Pour spécifier des noms de domaine alternatifs (SAN) ou des adresses IP dans une CSR, il est nécessaire de créer un fichier de configuration csr.conf
avec les informations suivantes :
[req]
prompt = no
distinguished_name = req_distinguished_name <1>
req_extensions = v3_req <2>
[req_distinguished_name]
CN = *.internal.lavoiedudev.com <3>
[v3_req]
subjectAltName = @alt_names <4>
[alt_names]
DNS.1 = *.localhost.lavoiedudev.com
IP.1 = 10.0.0.64
Nom de la section contenant les informations de l’entité demandant le certificat (C
, CN
, etc.).
Nom de la section contenant les extensions du certificat (subjectAltName
, etc.).
Il est possible de spécifier l’option -subj
dans le fichier de configuration.
Nom de la section contenant les noms de domaine alternatifs (DNS.1
) et les adresses IP (IP.1
).
En exécutant la commande OpenSSL avec ce fichier de configuration, nous obtenons une CSR contenant les informations supplémentaires souhaitées :
$ openssl req -in internal.lavoiedudev.com.csr -noout -text
Certificate Request:
Data:
Version: 1 (0x0)
Subject: CN = *.internal.lavoiedudev.com <1>
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
...
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:*.localhost.lavoiedudev.com, IP Address:10.0.0.64 <2>
Signature Algorithm: sha256WithRSAEncryption
...
Le champ CN
est toujours présent.
Les noms de domaine alternatifs (DNS
) et les adresses IP (IP
) sont spécifiés dans les extensions de la CSR.
Créer un fichier de configuration pour l’authentification client
Pour créer un certificat SSL compatible avec l’authentification client, il est nécessaire de créer un fichier de configuration csr.conf
avec les informations suivantes :
[req]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
CN = worker-node-1.internal.lavoiedudev.com <1>
[v3_req]
extendedKeyUsage = clientAuth <2>
Il est recommandé de spécifier le nom du client dans le champ CN
.
L’option extendedKeyUsage
permet de spécifier l’usage du certificat (clientAuth
pour l’authentification client).
En exécutant la commande OpenSSL avec ce fichier de configuration, nous obtenons une CSR contenant les informations supplémentaires souhaitées :
$ openssl req -in internal.lavoiedudev.com.csr -noout -text
Certificate Request:
...
Attributes:
Requested Extensions:
X509v3 Extended Key Usage:
TLS Web Client Authentication <1>
Signature Algorithm: sha256WithRSAEncryption
...
Nous retrouvons l’usage souhaité du certificat dans les extensions de la CSR.
Créer un fichier de configuration pour un usage spécifique
Avec ces deux premiers exemples, vous aurez compris la procédure à appliquer pour créer un fichier de configuration correspondant à l’usage souhaité. Il est simplement nécessaire d’ajouter les sections et les informations requises en respectant la syntaxe des fichiers INI.
Nous avons donc la possibilité d’utiliser toutes les extensions X.509v3 pour spécifier des informations standards dans une CSR, ou spécifier des extensions arbitraires à l’aide de champs ASN.1 personnalisés. Pour plus de détails, consultez la documentation d’OpenSSL.
Signer un certificat SSL avec l’autorité de certification et OpenSSL
La dernière étape consiste à signer le certificat SSL avec l’autorité de certification racine. Pour cela, il est nécessaire de disposer :
- De la clé privée de l’autorité de certification
- Du certificat SSL de l’autorité de certification
- De la CSR du certificat à signer
- Du fichier de configuration de la CSR (si nécessaire)
Pourquoi le fichier de configuration de la CSR peut-il être nécessaire ?
Lors de la signature d’un certificat SSL avec une autorité de certification, seuls les champs communs (country, state, common name, etc.) de la CSR sont extraits pour créer le certificat. Si nous souhaitons inclure des informations supplémentaires (noms de domaine alternatifs, adresses IP, etc.), il est nécessaire d’utiliser le fichier de configuration de la CSR.
Signature d’un certificat SSL avec OpenSSL
Pour signer un certificat SSL avec l’autorité de certification racine, la commande à exécuter est la suivante :
$ openssl x509 -req -in internal.lavoiedudev.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out internal.lavoiedudev.com.crt -days 365 -extfile csr.conf -extensions v3_req
Signature ok
subject=CN = *.internal.lavoiedudev.com
Getting CA Private Key
$ openssl x509 -in internal.lavoiedudev.com.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
7f:30:e2:b4:fc:85:fa:df:be:5f:6a:b3:dd:6a:dc:64:d9:5b:8f:68
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = FR, O = My Company, CN = My Company CA <1>
Validity
Not Before: Dec 3 07:49:47 2024 GMT
Not After : Dec 3 07:49:47 2025 GMT
Subject: CN = *.internal.lavoiedudev.com <2>
...
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:*.localhost.lavoiedudev.com, IP Address:10.0.0.64 <3>
Signature Algorithm: sha256WithRSAEncryption
...
L’émetteur du certificat correspond à l’autorité de certification racine créée précédemment.
Le sujet du certificat a été extrait de la CSR.
Les informations supplémentaires de la CSR ont été incluses dans le certificat à partir du fichier de configuration.
Conclusion
En résumé, les certificats SSL jouent un rôle essentiel dans la sécurisation d’une infrastructure informatique. En générant vos propres certificats SSL, vous pouvez assurer la confidentialité, l’intégrité et l’authentification des échanges sur votre réseau, que ce soit pour des environnements de test, de développement ou des infrastructures isolées.
Nous avons exploré les différentes étapes pour créer et gérer des certificats SSL autogérés, depuis la génération de la clé privée et de la CSR, jusqu’à la signature du certificat avec une autorité de certification racine. En suivant ces étapes, vous pouvez mettre en place une solution de sécurité robuste et adaptée à vos propres besoins.
Maintenant, c’est à vous de jouer ! Tentez de créer vos propres certificats SSL en suivant les étapes décrites dans ce guide, et partagez vos expériences ou posez vos questions dans les commentaires.