OpenSSL : création de certificats

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Il y a de cela un an je vous avais expliqué comment fonctionne le protocole TLS/SSL. Comment sont signés les certificats, quelles ont les messages envoyés entre le client et le serveur etc… Si ça ne vous parle je vous invite à lire cet article puis celui-ci. Ils vous fourniront les bases pour comprendre les commandes que nous allons utilisé dans cet article.

Pour commencer nous allons voir comment créer un certificat auto signé.

I/ Créer un certificat auto signé

Pour créer un certificat il faut avant tout avoir une clé privée. Cette clé privée, il faut la créer. Pour cela on utilisera cette commande :

openssl genpkey -aes-256-cbc -algorithm RSA -out key -pkeyopt rsa_keygen_bits:4096

Cette commande va créer une clé privée chiffrée (nommée ‘key’) grâce à l’algorithme aes-256-cbc. Cette clé sera créée pour fonctionner avec l’algorithme RSA :

1.png

Ensuite il serait bien de générer une seconde clé, publique cette fois ci. Pour cela on utilisera cette commande qui créera la clé publique pubkey à partir de RSA et de notre clé ‘key’.

openssl rsa -in key -pubout > pubkey

2.png

Maintenant qu’on a nos deux clés on va pouvoir créer et signer notre certificat avec notre propre clé privée via l’utilisation de la commande req (request). On spécifie que le format du certificat respecte la norme x509 et qu’il doit être valable pour une durée de 3650 jours (ou 1 an, tout dépend de vos besoins) :

openssl req -key key -x509 -new -days 3650 -out certautosigne.crt

3.png

Le problème c’est que ce certificat est auto signé. Donc si on l’intègre dans notre serveur web et qu’un utilisateur se connecte sur notre serveur alors il obtiendra ce joli message :

4.png

Pas cool… Du coup ce que je vous propose c’est de créer notre propre autorité de certification ! Comme ça on pourra créer tous les certificats qu’on veut sans avoir de messages d’erreur !

II/ Créer un certificat d’autorité de certification

Eh oui ! C’est possible ! Moi même j’étais sur le cul quand j’ai eu un cours sur la gestion de certificats et donc la création de certificats d’autorité. Du coup j’étais obligé de vous le partager vous vous en doutez bien !

Alors pour que tout cela fonctionne nous allons avoir besoin de créer plusieurs éléments : deux clés privées et deux certificats. Pour commencer nous allons créer la clé privée du certificat d’autorité.

Pour cela on utilise cette commande :

openssl genpkey -aes-256-cbc -algorithm RSA -out keyCA -pkeyopt rsa_keygen_bits:4096

Comme tout à l’heure, nous allons créé une clé chiffrée via AES256CBC:

5

Puis nous allons créé un certificat d’autorité de certification (nommé myCA) de type x509 qui sera signé via l’algorithme sha256 :

openssl req -x509 -new -nodes -key keyCA -sha256 -days 3650 -out certCA

Attention ! Par défaut ce certificat est un certificat d’autorité de certification. Si ce comportement est possible c’est parce que OpenSSL auto complete les paramètres manquants dans ma ligne de commande. Faites bien attention à ça car ça ne fonctionnera pas à tous les coups !

6.png

Ok maintenant qu’on a notre certificat d’autorité de certification, il va falloir créer le certificat de notre serveur et avant ça, il va falloir créer une autre clé privée :

openssl genpkey -aes-256-cbc -algorithm RSA -out keySERV -pkeyopt rsa_keygen_bits:4096

8

Puis il va falloir faire une demande de signature de certificat. C’est ce qu’on appelle une CSR (Certificat Signing Request). Pour cela on utilise cette commande :

openssl req -new -key keyServ -out certSERV

8.png

Maintenant qu’on a le CSR on va pouvoir demander à l’autorité de certification qu’on vient de créer de signer notre certificat à l’aide de sa clé privée et de son certificat. Mais avant ça il va falloir créer un petit fichier de configuration supplémentaire que l’on nommera « confnonCA ».

Dans ce fichier on ajoutera ces lignes :

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

Puis on lancera cette commande :

openssl x509 -req -in certSERV -CA certCA -CAkey keyCA -CAcreateserial -out certServ -days 1825 -sha256 -extfile conf

9.png

Et voilà, nous avons notre certServ qui est notre certificat x509. Maintenant nous n’avons plus qu’à importer le certificat de l’autorité de certification dans notre navigateur et  déployer notre certificat x509 sur nos serveurs pour obtenir une connexion sécurisée sans problème !

2 commentaires

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s