Open SSL : Générer ses certificats
Par david le mercredi 23 avril 2008, 23:54 - technique - Lien permanent

Vouloir établir une connexion sécurisée entre un internaute et un site web lors
d'un formulaire demandant par exemple des coordonnées banquaires ou un login /
mdp est un besoin fréquent.
Pour ce faire, il faut chiffrer les données transmises entre le navigateur du client et le serveur web.
Afin de crypter les données, il faut procéder à un échange de certificats entre le navigateur et le serveur web. Le mécanisme est le suivant : Le serveur dispose d'un fichier appelé certificat contenant une clée privée et une clée publique. Il envoie au navigateur un certificat contenant des informations sur le nom de la société qui met en oeuvre le site, son pays de résidence et surtout une clée publique. La clée privée est gardée jalousement a l'abris sur le serveur. Le navigateur va donc présenter ce certificat à l'internaute des réception de celui-ci (et vous avez souvent une petite fenêtre qui vous demande d'accepter ou refuser ce certificat).
Si le certificat est accepté, le navigateur va crypter les informations à envoyer avec la clée publique, et cela garantira que seul le détenteur de la clée privée correspondante pourra décrypter les données. Ce mécanisme est néanmoins incomplet : si vos données sont en effet protégées entre le navigateur et le serveur, vous n'êtes pas sur de l'identité du serveur. Pour cela il existe des organismes comme Vérisign qui vous garantissent que le serveur avec lequel vous dialoguez est bien celui qu'il prétend être.
Pour ce faire ces organismes disposent de certificats servant à signer un certificat émis par la société du site web.
Les navigateurs intègrent automatiquement les certificats de ces grandes compagnies (appelées "autorités de certification") et peuvent vérifier si le certificat qui lui est envoyé par un site est approuvé par une de ces autorités de certification.
Voici la définition officielle disponible sur le site de Vérisign :
"Chaque certificat SSL est créé pour un serveur particulier dans un domaine spécifique pour une entité professionnelle vérifiée. Comme un passeport ou un permis de conduire, un certificat SSL est émis par une autorité de confiance, l’autorité de certification (Certification Authority, CA en abrégé). Lors de la transaction SSL, le navigateur demande l’authentification du serveur. Le client voit apparaître le nom de la société lorsqu’il clique sur certaines marques de confiance SSL (telles que le sceau VeriSign Secured™ Seal) ou utilise un navigateur prenant en charge la norme Extended Validation (Validation renforcée). Si l’information ne correspond pas ou si le certificat est périmé, le navigateur affiche un message d’erreur ou un avertissement"
Un certificat approuvé par une autorité de certification est appelé un certificat signé.
D'ailleurs quand le navigateur reçoit un certificat signé, l'internaute n'a pas à donner son approbation pour accepter / refuser le certificat : le navigateur lui fait confiance automatiquement.
La signature d'un certificat par une autorité de certification étant payante, il est nécessaire pour un développeur de pouvoir émuler la signature de certificat.
Pour ce faire il faut commencer par créer des certificats allant servir à signer les autres.
C'est parti :
- Je suppose que vous avez déjà installé openssl sur votre environnement unix.
- Je me base sur la distribution ubuntu 8.04.
La première chose à faire est de modifier un fichier de configuration pour indiquer que les certificats que nous allons créer vont être des certificats d'autorité certificatrice.
- Editer le fichier /etc/ssl/openssl.cnf.
Modifier dir pour pointer vers un dossier allant contenir tous vos futurs
certificats CA. Par exemple :
dir = /opt/root-certificats/
- Toujours dans le même fichier, remplacer tous les
basicConstraints=CA:FALSE
par
basicConstraints=CA:TRUE
(3 occurences dans le fichier par défaut normalement).
Cet attribut sera présent dans les certificats générés et indique au navigateur qu'il sagit bien d'un certificat émanant d'une CA.
- Modifier le fichier /usr/lib/ssl/misc/CA.sh(ce fichier est un script shell vous permettant de gagner un temps précieux pour créer vos certificats CA, il lance a votre place bon nombre de commandes du jeu d'outils openssl).
CATOP=/opt/root-certificats
- Fermer le fichier ci-dessus et lancer la ldc :
/usr/lib/ssl/misc/CA.sh -newca
- Répondre aux questions en notant bien la passphrase demandée.
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:David ROBIN
Certification corp
Organizational Unit Name (eg, section) []:certification dpt
Common Name (eg, YOUR name) []:CATOPID
Email Address []:votreemail@mail.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:yourpassword
- Pour certaines opérations par la suite il faut convertir le fichier .pem du
certificat en .der avec la ldc suivante :
openssl x509 -in /opt/root-certificats/cacert.pem -inform PEM -out
/opt/root-certificats/cacert.der -outform DER
- Ré-editer le fichier /etc/ssl/openssl.cnf
Remplacer tous les basicConstraints=CA:TRUE ou basicConstraints=CA:true
par basicConstraints=CA:FALSE (4 occurences cette fois car une des entrées du
fichier d'origine était déjà a true)
Ainsi tous les certificats créés par la suite n'auront pas l'attribut indiquant
qu'il sagit d'un certificat émanant d'une authorité certificatrice.
That's all : vos certificats CA sont créés.
Il reste une dernière petite étape : importer votre certificats dans Firefox (ou IE).
Par défaut firefox inclus un certains de certificats émanants de véritables autorités de certification.
Il faut enrichir cette liste avec notre autorité de certification nouvellement créée.
Aller dans Préférences > Avancé > Chiffrement et cliquer sur le bouton "Afficher les certificats".
Cliquer sur l'onglet "Autorités" de la nouvelle fenêtre.
Ici il faut importer le fichier /opt/root-certificats/cacert.der (ce fichier doit être distribué sur tout vos postes clients).
Vous devriez voir votre autorité parmis celle déjà présente, comme sur le screenshot ci-dessous :

Par la suite, nous utiliserons ces certificats racines afin de signer d'autres certificats, comme dans mon post suivant sur tomcat en mode APR.