Installer et configurer openssl sur Linux Debian Lenny
Par Rémi TAUPIN le lundi 14 décembre 2009, - Lien permanent
Openssl est un outil de
cryptographie qui sert à :
- Créer une Authorité de Certification pour un
serveur
- Chiffrer des données entre une application serveur et une application cliente
(http, vpn, etc.)
- Chiffrer et déchiffrer des fichiers sur un disque
- Identifier des machines clientes auprès de serveurs
- Plus encore...
Cet article explique l'installation et la configuration de openssl. Nous allons commencer par installer openssl, puis nous créerons une Autorité de Certification (AC) pour que le serveur puisse gérer des certificats.
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.pemLa 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é.










