Créer son Autorité de Certification (CA) avec OpenSSL

L’objectif du présent article est de vous permettre de créer des certificats SSL utilisables pour sécuriser une connexion à un serveur web (https), un serveur mail (pop3s, imaps), un serveur ssh ou tout autre utilisation en créant sa propre autorité de certification (CA pour Certificate Authority).

Avant de vous lancer dans l’aventure prenez en compte ceci :

a) Utiliser un certificat signé par une autorité de certification (CA) reconnue.

Tous les CA qui sont reconnus par les navigateurs par défaut sont commercial, vous débourserez donc environ 150 $ par certificat et ceux-ci devront être renouvelés une fois par an voir deux. Pas de manipulation fonctionne “out of the box” pour les utilisateurs.

b) Générer son propre certificat auto-signé (le but de cet article).

La gratuité est au rendez-vous mais nécessite d’importer manuellement le certificat public de votre CA dans votre navigateur ou application, requiert l’approbation de l’utilisateur et peut être effrayant pour l’utilisateur inexpérimenté.

Vous avez fait votre choix et comme moi aimez mettre les mains dans le “camboui” et avoir la “maitrise” des rouages de vos serveurs, alors poursuivons avec l’installation de notre propre CA sur une Debian Lenny …

1. Installez les packages nécessaires.

Comme à notre habitude, on lance une console, on passe en root, on update nos sources et on télécharge les packages suivants :

apt-get update
apt-get install openssl

OpenSSL sur Debian est fourni avec deux fichiers qui rende le travail d’un CA beaucoup plus facile. Ces deux fichiers sont situés dans /usr/lib/ssl/misc et se nomment respectivement CA.pl et CA.sh.

Nous utiliserons CA.pl dans la suite de cet article avant de poursuivre il nous faut le configurer ainsi que le fichier de configuration de openSSL situé dans /etc/ssl/openssl.cnf car par défaut tout sera rangé dans le répertoire local ./demoCA et nous souhaitons personnaliser certains paramétres :

  • la durée de vie de notre CA sera de 10 ans.
  • nos certificats SSL auront une durée de 2 ans.
  • nous stockerons nos informations de CA dans /etc/ssl/ca.
  • nous souhaitons un encodage 2048 bits RSA de nos certificats.

2. Modifications du fichier /usr/lib/ssl/misc/CA.pl.

Chercher les variables $DAYS, $CADAYS, $CATOP et changer les pour qu’elles ressemblent à ça :

...
$DAYS="-days 730";	# 2 year
$CADAYS="-days 3650";	# 10 years
...
$CATOP="/etc/ssl/ca";
...

Dernière modification nous voulons que nos certificats CA est une clef 2048 RSA au lieu des 1024 RSA par défaut, pour cela cherchez la ligne print “Making CA certificate …\n”; juste après changer pour :

...
system ("$REQ -newkey rsa:2048 -keyout " .
...

3. Modifications du fichier /etc/ssl/openssl.cnf.

Les changements doivent correspondre à vos modifications de CA.pl :

...
[ CA_default ]

dir = /etc/ssl/ca # Where everything is kept
...
default_days = 730 # how long to certify for
...
[ req ]
default_bits = 2048
...

Pour finir avec ce fichier vous pouvez si vous le souhaitez modifier les valeurs de la section [  req_distinguished_name ] qui se terminent par _default pour les faire correspondre à vos besoins. Lors de la génération de vos certificats celles-ci pourront toujours être écrasées mais mettez ici celles que vous utiliserez le plus souvent :

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = FR
...
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Ile de France
...

4. Génération du certificat CA et de la zone de stockage.

Lancez cette ligne de commande :

/usr/lib/ssl/misc/CA.pl -newca
  • Appuyez sur la touche entrée pour le nom du certificat par défaut.
  • Saisissez un bon mot de passe, celui-ci protège votre CA.
  • Il vous sera demandé les détails du certificat (pays, etc).
  • Le mot de passe vous sera demandé pour générer le certificat.

Votre nouveau certificat cacert.pem est disponible dans /etc/ssl/ca/cacert.pem et vous pouvez désormais le distribuer pour l’installation dans les navigateurs ou applications.

5. Génération de certificat.

Génération d’une demande de certificat :

/usr/lib/ssl/misc/CA.pl -newreq

Il vous sera demandé les détails du certificat, le point important est le CN qui doit correspondre au domaine du site que vous souhaitez sécuriser. Vous obtiendrez dans le répertoire de travail 2 fichiers “newkey.pem” et “newreq.pem”, “newreq.pem” est le fichier qui nous servira pour la signature avec notre CA mais vous pouvez aussi vous servir de celui-ci pour l’achat d’un certificat auprès d’un CA commercial.

Vous avez rentré un mot de passe pour le certificat, cela peut être bloquant pour les applications qui se lance au démarrage de votre système. Il nous faut donc enlever ce mot de passe du certificat, pour cela :

openssl rsa -in newkey.pem -out newkey-nopass.pem

Le mot de passe vous sera demandé une dernière fois et cela génèrera une clef sans mot de passe.

Signature d’une demande de certificat :

/usr/lib/ssl/misc/CA.pl -sign

Cela signe la demande et génère un “newcert.pem” dans le répertoire de travail, le mot de passe du CA vous sera demandé.

Installation d’un certificat :

Par défaut vous aurez besoin du certificat et de la clef, je range donc mes certificats dans /etc/ssl/certs pour le “newcert.pem” et dans /etc/ssl/keys pour le “newkey.pem”, au passage je les renomme selon le domaine du certificat soit mondomaine.crt et mondomaine.key.

Et voilà vous disposez désormais d’une mini PKI pour gérer tous vos certificats SSL, qui de nos jours avec tous les échanges de données via le réseau est primordial pour garder un minimum de confidentialité …

A noter : Pour les “allergiques” des commandes en mode console, il existe un petit utilitaire en mode graphique “tinyca” :

- http://packages.debian.org/lenny/tinyca

Enjoy!

Ajouter un commentaire