Administration Systeme et Réseau IUT Informatique La Rochelle
TP – OpenSSL (Suite)
Utilisation d’OpenSSL
Dans ce ce TP, vous allez utiliser OpenSSL dont la syntaxe est relativement simple :
openssl <commande> <options>
Voici quelques commandes principales :
n X509 pour manipuler les certificats X509.
n genrsa pour générer des clefs RSA.
n Req pour les requetes
Il en existe beaucoup d’autres. En cas de doutes sur OpenSSL, vous pouvez vous aider de la Cheat
Sheet ici (http://www.ipcalc.org/openssl-cheat-sheet)
Pour accéder à l’aide précise sous openssl,vous pouvez utiliez l’argument help sur la commande
visée, par exemple « openssl x509 help » où help porte sur la commande x509 de l’outil openssl.
2. Mise en place de l’infrastructure globale
Afin de mener à bien ce TP, vous allez devoir mettre en place une architecture composée d’une
machine virtuelle (le serveur) et de votre machine hôte (le client).
3. Visualisation de certificats
Un certificat est un document qui comprend essentiellement une clé publique et des renseignements
sur le propriétaire de cette clé, le tout signé avec la clé privée d’un organisme reconnu, un CA
(Certification Authority).
Un certificat permet de dialoguer de manière sûre (chiffrée) avec la personne ou la société qu’il
décrit. Si l’on possède le certificat du signataire (CA) et que l’on a confiance en lui, on a l’assurance
de l’identité du propriétaire de la clé.
Q1. Le logiciel firefox contient plusieurs certificats de CA, dont celui de la société Verisign.
Affichez le.
Firefox -> Préférences -> Avancé -> Certificats
1
Administration Systeme et Réseau IUT Informatique La Rochelle
Il y en a plusieurs de disponibles
L’ISO a établi un protocole, baptisé x509, permettant l’authentification sur un réseau. Ce protocole
utilise des certificats au format normalisé : x509. Ces certificats ont été utilisés au début pour la
sécurisation du courrier électronique dans le cadre du protocole PEM (Privacy Enhanced Mail),
l’ancêtre de S/MIME. Maintenant ils sont utilisés aussi bien dans la sécurisation du Web (via SSL) que
dans bien d’autres domaines. Les différents champs présents dans un certificat sont les suivants :
1. La version
2. Le numéro de série du certificat
3. L’algorithme utilisé pour la signature du certificat
4. L’organisme émetteur du certificat
5. La période de validité
6. Le sujet (nom, prénom, organisation, ….)
7. La clé publique du détenteur du certificat
8. La signature de l’émetteur
La description du sujet (possesseur de la clé publique) et du CA peuvent utiliser des abréviations
suivantes. Voici un exemple de ce que vous pouvez renseigner :
• C (Country) : FR
• S (State) ou P (Province) : NA
• L (Locality) : LR
• (organization) : ULR
• OU (Organization Unit) : IUT
• CN (Common Name) : (votre nom)
• E (E-mail) : (vide)
Un certificat d’un CA intermédiaire peut signer d’autres certificats. Mais il est lui-même signé par un
CA hiérarchiquement supérieur, et ainsi de suite. Au sommet de cette pyramide, il y a les certificats
des CA racines qui sont auto signés : le sujet et le signataire sont les mêmes.
Q2. A partir de la documentation fournie par man pour la commande « openssl x509 », visualiser
le contenu d’un certificat
2
Administration Systeme et Réseau IUT Informatique La Rochelle
openssl x509 –in fichierCertificat –text –noout
4. Créer un certificat x509 auto-signé
Vous allez maintenant créer un certificat x509 auto-signé
Q1. Créez une clé privée à partir de la fonction « openssl genrsa » en vous aidant de la
documentation (man openssl ou option help sur la commande ci-dessus), la clé doit être
créée dans le fichier server.key.
mkdir keys
cd keys
openssl genrsa -out server.key 1024
Q2. Appliquez cette commande sur votre clé :
chmod 440 server.key
A quoi sert-elle ?
Q3. Créer une requête de certificat. Un certain nombre d’informations vous seront demandées.
La plus importante est le Common Name pour laquelle Il faut saisir le FQDN (adresse IP dans
votre cas) du serveur pour lequel est destiné le certificat. Créez la requête dans le fichier
server.req puis visualisez la requête.
openssl req -new -key server.key -out server.req
vi server.req
Q4. Le certificat est normalement créé par un CA quand il signe la requête avec sa clé privée.
Dans le cas d’un certificat auto-signé, c’est le même organisme qui crée la requête qui la
signe. Appliquez la commande suivante pour créer le certificat auto-signé :
openssl x509 -req -days 365 -in server.req -signkey server.key -out server.crt
A quoi correspondent les paramètres ? Affichez le certificat que vous venez de créer
5. Tester une liaison SSL
Vous allez maintenant tester une liaison SSL à partir d’un de vos serveurs. Pour cela :
Q1. Activer le serveur de test avec la commande suivante :
openssl s_server -accept 5000 -cert server.crt -key server.key -www -state
On donne en argument le port d’écoute (ici 5000) ainsi que le chemin du certificat et de la clé
privée. Visualisez les informations après une connexion en local avec un navigateur. (Ctrl-C
pour mettre fin au serveur - https://localhost:5000 en local)
On arrive sur une page d’avertissement et un refus de connexion.
Q2. Que signifie le message d'avertissement ?
Que le certificat est potententillement non sûr car il n’est signée par
aucune CA reconnue.
Q3. Visualisez le certificat à travers le navigateur. Retrouvez les informations saisies lors de la
création du certificat (exercice précédent)
Sous Firefox, il faut cliquer sur Avancé sur la page du message d’alerte
puis bouton « Voir » (avant d’accepter l’exception de sécurité)
3
Administration Systeme et Réseau IUT Informatique La Rochelle
6. Créer un CA et signer des certificats
Dés que l'on souhaite mettre en œuvre une connexion cryptée par SSL (comme pour Apache – HTTPS
par exemple), il est nécessaire d'avoir un certificat. Ce certificat installé sur le serveur contient une
paire de clef qui va permettre aux deux parties de mettre en place un échange chiffré. Une des
informations échangées à ce stade est une autre clef qui va servir quant à elle à chiffrer, par un
algorithme dit « symétrique », le reste de la communication. La raison de ce changement de clef tient
à ce que le chiffrement asymétrique est plus demandeur en ressources, mais aussi plus sécurisé, que
sa contrepartie symétrique. Ce protocole permet en quelque sorte d'arriver au meilleur des deux
mondes.
Un certificat peut très facilement être généré en utilisant les outils du paquet openssl. Mais pour
qu'un certificat serveur soit déclaré valide sur le client il doit répondre à trois règles, et tout
manquement à l'une de ces règles entraîne l'affichage d'un message d'avertissement sur le
navigateur client :
1. Le certificat doit contenir le nom du site qu'il sécurise (ex. www.mon_site.fr). Si ce n'est pas
le cas, le navigateur protestera que le certificat ne provient pas de la bonne adresse
2. Le certificat doit contenir une signature fiable. Si ce n'est pas le cas, certains navigateurs se
contenterons de vous le signaler, d'autres, comme FireFox, bloqueront l'accès avec une
signature invalide
3. Le certificat doit être signé par une CA (Autorité de Certification) ou par un certificat qui lui
même est signée par une CA. C'est ce point que nous allons traiter ci-dessous
Une autorité de certification est un service proposé et donc les fichiers de ce service doivent être
hébergés sur votre serveur. Nous allons modestement faire notre petite PKI (Private Key
Infrastructure) qui va nous permettre de générer et de signer à la chaîne nos certificats.
Il est important de préciser que cette PKI est « modeste » puisqu’une vraie PKI est composée d’un
ensemble complexe comprenant non seulement la génération des certificats, mais aussi et entre
autre leur révocation. Cependant, nous disposerons bientôt d'une mini-pki avec son CA et sa base de
certificats ce qui n'est déjà pas si mal.
Première étape créer un dossier qui contiendra nos données, disons /root/pki, et la base de données
des certificats. Afin de garantir la sécurité de ces fichiers (configuration, certificats validés, clé privée,
…), il est important de placer ces fichiers dans un répertoire sûr :
# Création de l'infrastructure
cd /home/admin
mkdir pki
cd pki
mkdir -p db/ca.db.certs
mkdir config
mkdir certificats
# Initialisation des numéros de séries à 1
echo '01'> db/ca.db.serial
# Initialisation de l'index des certificats
cp /dev/null db/ca.db.index
Q1. Pourquoi faut-il éviter les fuites / failles de sécurité sur ce dossier ?
Car sinon n’importe qui pourrait créer des certificats au nom de l’entité
responsable du serveur et il n’y aurait donc plus de confiance dans le tiers
4
Administration Systeme et Réseau IUT Informatique La Rochelle
Maintenant nous allons créer le fichier de configuration config/ca.config qui va permettre à
openssl d'utiliser notre nouvelle base :
[ ca ]
default_ca = CA_own
[ CA_own ]
dir = /home/admin/pki/db
certs = /home/admin/pki/db
new_certs_dir = /home/admin/pki/db/ca.db.certs
database = /home/admin/pki/db/ca.db.index
serial = /home/admin/pki/db/ca.db.serial
RANDFILE = /home/admin/pki/db/ca.db.rand
certificate = /home/admin/pki/certificats/ca.crt
private_key = /home/admin/pki/certificats/ca.key
default_days = 3000
default_crl_days = 30
default_md = md5
preserve = no
policy = policy_anything
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
Q2. Maintenant que votre serveur est en place, vous allez générer la clef privée de votre CA en
utilisant le cryptage des3 de 1024 bits.
openssl genrsa -des3 -out certificats/ca.key 1024
Q3. La clef de votre CA étant générée, vous allez créer un certificat valable pour 3000 jours en
respectant la norme x509 et en utilisant la clef précédente.
openssl req -utf8 -new -x509 -days 3000 -key certificats/ca.key -out
certificats/ca.crt
Les informations rentrées ici ont une très grande importance (tout du moins le seraient si vous deviez
faire une vraie CA). Pensez donc à les compléter de manière la plus crédible possible.
À ce stade, votre CA est complet. Vous allez maintenant devoir générer le fichier de certificat (fichier
"DER") à fournir aux clients (navigateur web entre autres) pour que la 3e règle soit satisfaite et que le
client n’affiche pas de message d’erreur pour tous les futurs certificats générés.
openssl x509 -in certificats/ca.crt -outform DER -out certificats/ca.der
Le fichier « ca.der » est le seul fichier que vous donnerez aux utilisateurs. Tout le reste doit rester
strictement privé !!
Vous avez maintenant une pki fonctionnelle, et il ne vous reste plus qu'à la tester en générant votre
premier certificat serveur.
Pour avoir un certificat en règle, vous devez d'abord générer une clef
openssl genrsa -out certificats/monsite.key 1024
5
Administration Systeme et Réseau IUT Informatique La Rochelle
Afin de pouvoir faire signer votre certificat, vous allez devoir générer un ficher intermédiaire appelé
Certificate Signature Request (CSR ou Demande de Signature de Certificat). Ce fichier contient déjà
tout ce qu'un certificat contiendra sauf la signature du CA. C'est là qu'intervient le tiers de confiance
qui, en signant votre demande de certificat, vous permet d'obtenir en retour un certificat valide. La
seule chose que vous devez donner comme information est le nom de la machine. C'est très
important car sans cela, vous violeriez la règle n°1 donnée plus haut.
openssl req -days 365 -new -key certificats/monsite.key -out
certificats/monsite.csr
Enfin, la dernière étape consiste à faire valider votre demande et d’utiliser votre PKI et votre CA pour
signer tout cela et obtenir votre certificat final :
openssl ca -config config/ca.config -out certificats/monsite.crt -infiles
certificats/monsite.csr
Q4. Voilà, vous avez maintenant un certificat tout neuf. Vérifiez son contenu comme vu dans les
exercices précédents.
openssl x509 -text -in certificats/monsite.crt
7. Sécurisation d’une page web avec Apache et OpenSSL
Maintenant que vous avez créé des certificats qui sont validés par votre propre PKI, vous allez mettre
tout cela en place pour pouvoir diffuser une page web sécurisée (HTTPS). Il faut au préalable installer
Apache via apt-get, s’il ne l’est pas.
Pour que le protocole SSL puisse fonctionner avec le Serveur HTTP Apache2, il faut activer le module
ssl avec la commande :
sudo a2enmod ssl
puis recharger la configuration d'Apache2 :
sudo service apache2 force-reload
Il va maintenant vous falloir configurer Apache pour écouter à la fois sur le port 80 et sur le port 443
(https). Une façon simple de faire cela consiste à créer un hôte virtuel dédié aux accès sécurisés. Pour
cela :
Q1. Allez dans le dossier de configuration des sites apache
cd /etc/apache2/sites-available/
Q2. Recopier la configuration par défaut pour la nouvelle configuration ssl
sudo cp default-ssl.conf my-ssl.conf
Q3. Ajouter les directives SSLEngine On et SSLCertificateFile
/etc/ssl/private/localhost.pem à votre fichier de configuration créé à la question 2
(attention, il vous faudra adapter la valeur de la second directive à votre cas)
Q4. Activer la configuration du site ssl : sudo a2ensite ssl
Q5. Testez l’accès à votre page d‘accueil depuis firefox en http et en https
Q6. Que se passe-t-il ?
Le certificat est toujours considéré comme auto-signé puisque la CA n’est
pas connue de Firefox
Q7. Modifiez la configuration de Firefox pour qu’il accepte les certificats provenant de votre CA
6
Administration Systeme et Réseau IUT Informatique La Rochelle
Aller dans :
Options
Avancé
Chiffrement
Afficher les certificats
Autorités
Importer
Allez chercher le fichier cacert.pem et importez le dans les certificats racine de votre navigateur.