Glossaire

IGC : Interface de Gestion des clés
L'IGC permet de :
- Emettre les certificats
- Les révoquer
- Les publier dans un annuaire

AC : Autorité de Certification.
Une AC possède un bi-clé pour signer les clés publiques (et en faire des certificats)

Certificat : Clé publique signée par une AC. Grâce à l'utilisation des certificats, aucune donnée n'est transmise en clair lors de l'authentification.
Le certificat permet de :
- Chiffrer les communications
- Authentifier des utilisateurs
- Authentifier des machines
- Chiffrer des fichiers
- Signer des fichiers

Pour vérifier l'authenticité d'un certificat, l'IGC met à disposition :
- La clé publique de son AC racine sous la forme d'un certificat autosigné
- Les certificats des utilisateurs

X.509 : norme qui permet de gérer les certificats

Installation de openssl

L'installation par elle même n'est pas trop compliquée...

monserveur:/etc/ssl# aptitude install openssl

Openssl est maintenant installé, mais pas configuré. On termine à la main la configuration en complétant le répertoire /etc/ssl et en créant les clés du serveur.

On va commencer par refaire complètement l'arborescence du répertoire de configuration de manière à avoir une structure différente pour le CA et pour les autres services qui auront besoin de clé et certificats :

monserveur:~# cd /etc/ssl
monserveur:/etc/ssl# mkdir ca
monserveur:/etc/ssl# mkdir ca/newcerts
monserveur:/etc/ssl# mkdir conf
monserveur:/etc/ssl# mkdir csr
monserveur:/etc/ssl# mkdir key
monserveur:/etc/ssl# mkdir cert
monserveur:/etc/ssl# touch ca/index.txt
monserveur:/etc/ssl# echo '01' > ca/serial
monserveur:/etc/ssl# chmod 700 ca

Cette dernière commande permet de s'assurer que seul root pourra lire le contenu de /etc/ssl/ca.

La commande tree nous montre l'arborescence suivante :

Explication des répertoires :

/etc/ssl/ : répertoire de configuration général de openssl
/etc/ssl/ca/ : répertoire qui contient les fichiers de l'AC
/etc/ssl/ca/newcerts/ : répertoire qui contient les certificats signés par l'AC
/etc/ssl/ca/index.txt : fichier ascii qui référence les certificats
/etc/ssl/ca/serial : fichier ascii qui contient un n° de série. Celui sera incrémenté à chaque nouveau certificat
/etc/ssl/conf/ : répertoire qui contient les fichiers de configuration pour créer des certificats pour les différents services (smtps, https, etc.)
/etc/ssl/csr/ : répertoire qui contient les demandes de signatures
/etc/ssl/key/ : répertoire qui contient les clés secretes des certificats
/etc/ssl/cert/ : réperoire qui contient les certificats signés

Il faut maintenant créer le fichier de configuration du CA pour qu'il ressemble à ça :

monserveur:/etc/ssl# vi/etc/ssl/conf/ca.cnf

[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/ssl
certs = $dir/ca/certs
new_certs_dir = $dir/ca/newcerts
database = $dir/ca/index.txt
certificate = $dir/ca/ca.pem
serial = $dir/ca/serial
private_key = $dir/ca/ca.key
default_days = 3650
default_md = sha1
preserve = no
policy = policy_match
[ policy_match ]
organizationName = match
commonName = supplied
emailAddress = optional
[ req ]
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
organizationName = Organisation (obligatoire)
organizationName_default = antiseches.net
commonName = Nom CN (obligatoire)
commonName_max = 64
emailAddress = Adresse mail (optionnel)
emailAddress_max = 40
[CA]
nsComment = "CA antiseches.net"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
basicConstraints = critical,CA:TRUE,pathlen:0
keyUsage = keyCertSign, cRLSign

Ce fichier est assez basique. On pourrait ajouter d'autres options à renseigner comme un mot de passe (challengePassword), un nom de pays (countryName) ou encore un nom de ville (localityName).

Maintenant que ce fichier est créé, on peut générer la clé privée de l'AC et le certificat (la clé publique) avec la commande suivante :

monserveur:/etc/ssl# openssl req -new -x509 -config ./conf/ca.cnf -extensions CA -sha1 -newkey rsa:4096 -nodes -days 3650 -keyout ca/ca.key -out ca/ca.pem

Generating a 4096 bit RSA private key..........................++++++..................++++++
writing new private key to 'ca/ca.key'
-----
You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.
-----
Organisation (obligatoire) [antiseches.net]:
Nom CN (obligatoire) []: AC antiseches.net
Adresse email (optionnel) []:
.

Explication de la commande :

req : Permet de créer une demande de certificat. C'est une clé publique non signée.
-x509 : Le certificat créé avec la commande req sera auto-signé et non pas une simple demande. Cela nous permet de générer le certificat racine (root) de cette AC
-config ./conf/ca.cnf : Fichier de configuration à utiliser
-extensions CA : Section du fichier de configuration à utiliser
-newkey rsa:4096 : On génère la clé privée en même temps que le certificat. Ce sera une clé RSA de 4096 bits
-days 3650 : La validité de la signature est de 10 ans (3650 jours)
-keyout ca/ca.key : La clé privée
-out ca/ca.pem : Le certificat de l'AC

Les fichiers suivants donc été générés :

- /etc/ssl/ca/ca.key : la clé privée de l'AC
- /etc/ssl/ca/ca.pem : la clé publique de l'AC. Il faudra exporter cette clé sur les stations de travail qui auront besoin de faire des échanges sécurisés avec notre serveur.

Importation de la clé publique

Pour que le serveur puisse être authentifié par une station Windows, il faut commencer par importer le certificat de l'AC en le copiant par exemple sur une clé USB ou la proposant en téléchargement sur une page web. Une fois le fichier copié, suivre la procédure suivante :

- Aller dans le Panneau de configuration, puis sélectionner Options Internet (dans l'affichage classique de la liste). On peut aussi aller dans Internet Explorer, puis dans le menu Outils / Options.

- Dans la fenêtre qui vient de s'ouvrir, aller dans l'onglet Contenu, puis cliquer sur le bouton Certificats

- Dans la nouvelle fenêtre, aller dans l'onglet Autorités principales de confiance puis cliquer sur le bouton Importer

- Suivre l'assistant d'importation

- Sélectionner le fichier à importer

- Dans Types de fichiers, choisir Tous les fichiers (*.*)

- Placer le certificat dans la magasin Autorités de certification racines de confiance

- Valider par Oui

- On voit maintenant le nouveau certificat dans la liste

Utilisation de openssl

Le AC est maintenant prête à être utilisée. Son fonctionnement théorique est le suivant :

Création de certificats pour le serveur (apache, openvpn, etc.)

1- On génére une demande de certificat avec la commande suivante :

# openssl req -newkey rsa:4096 -keyout key/cle-privee.key -out csr/cle.csr

2- On génère et on signe la demande de certificat :

# openssl ca -in csr/cle.csr -out cert/certificat.pem

Ici, il faudra entrer le mot de passe de la clé privée de l'AC si il est défini

3- On supprime la clé publique qui a servi à la demande de certificat. Cette étape est optionnelle.

# rm csr/cle.csr

Pour plus de lisibilité, on mettra le nom du service à la place de certificat.pem. Par exemple, apache.pem.

Ces commandes ont permises de :

- Créer la demande de certificat : /etc/ssl/csr/cle.csr
- Créer la clé privée du serveur : /etc/ssl/key/cle-privee.key
- Créer le certificat du serveur : /etc/ssl/cert/certificat.pem
- Incrémenter le fichier /etc/ssl/ca/serial
- Ajouter la référence au certificat dans /etc/ssl/ca/index.txt
- Incrémenter la base de données qui se trouve dans /etc/ssl/ca/newcerts

Révocation de certificats

Pour révoquer un certificat, il faudra suivre la procédure suivante :

- Lire le contenu du fichier /etc/ssl/ca/index.txt pour voir le n° de série du certificat à révoquer :

monserveur:/etc/ssl# cat /etc/ssl/ca/index.txt

V XXXXXXXXXXXXZ 01 unknown /O=foo/CN=mails.antiseches.net

Ici il n'y a qu'un certificat. On note que la ligne commence par un V qui veut dire Valide. Une fois le n° de série repéré (01), on tape la commande suivante :

monserveur:/etc/ssl# openssl ca -config ./conf/ca.conf -revoke ca/newcerts/01.pem

La première ligne qui référencie le certificat dans /etc/ssl/ca/index.txt commence maintenant par un R au lieu de V. Le certificat est révoqué.