OPENSSL
OPENSSL
OPENSSL
A.ABBAS
1
Février 2016
Introduction
• Le développement des transactions électroniques dans
un nombre croissant de domaines économiques pose
de manière de plus en plus critique le problème de la
sécurité de telles transactions, notamment vis-à-vis
des questions de confidentialité, d’authentification et
de certification qui s’y rattachent.
• Pour tous ces aspects, la cryptographie est appelée à
devenir une technique de plus en plus fondamentale
pour la protection des informations possédées et/ou
échangées par des individus ou des organisations.
2
Objectifs
Maximus Lucilla
Message Message
Maximus Lucilla
Message Message
5
Kpub1 Maxim
Kpriv1 Maxim Processus-Côté Maximus
Kpub2 Lucilla
Maximus
Lucilla
file.aes
lucilla.pub RSA k.crypt k.crypt
file.sign
k.session
SHA file.sha
$ openssl rsautl –pubin –encrypt –in k.session –inkey lucilla.pub –out k.crypt
k.session
SHA file.sha
file.txt
SHA file.sha
9
Kpub1 Maxim
Kpriv1 Maxim Processus-Côté Maximus
Kpub2 Lucilla
Maximus
file.sha
=? file.empreinte RSA
GOTO STEP 2
11
Processus-Côté Lucilla
Lucilla
file.aes
k.crypt
file.sign
k.session RSA file.sha
12
Processus-Côté Lucilla
Lucilla
file.aes
k.crypt
file.sign
AES k.session file.sha
Paquet reçu
file.txt
13
DIVERSES MANIPULATIONS
14
CHIFFREMENT FORT ET FAIBLE
• Openssl fournit une liste des chiffres (combinaison
en terme de système pour l'authentification,
l'intégrité et la confidentialité) qu'il considère
comme fort ou faible à l'aide des commandes :
$ openssl ciphers -v 'HIGH‘
$ openssl ciphers -v 'LOW'
17
Résumé - hachage
• L'appliquer à /etc/passwd
$ openssl md5 /etc/passwd
• On peut aussi utiliser sha
$ openssl sha /etc/passwd
Réflexion :
• Combien de bits utilise md5 et combien de bits utilise
sha dans les cas précédents? (utilisez la commande wc
pour compter le nombre de caractères puis trouvez le
nombre de bits suivant le formatage des données – faire
un man md5 ou man sha)
18
Chiffrement
Crypter un fichier avec cast5 en CBC (Cypher
Block Chaining)
$ openssl cast5-cbc -in /etc/passwd -out passwd.cast5
On le décrypte dans le fichier passwd.restore
$ openssl cast5-cbc -d -in passwd.cast5 -out passwd.restore
Vérifions que le fichier est identique
$ diff /etc/passwd passwd.restore
19
AUTORITÉS DE CERTIFICATION
20
Générer certificat
Créer clé privé
$ openssl genrsa –des3 –out commerce.dz.key
2048
Créer la requête de certification
$ openssl req –new –key commerce.dz.key
–out commerce.dz.csr
Auto-signer le certificat
$ openssl x509 –req –days 365 –in
commerce.dz.csr –signkey
commerce.dz.key –out commerce.dz.cert
21
Création d’une autorité de certification
22
• La procédure de création d’une autorité de certification avec
OpenSSL est simplifiée par les scripts perl et bash « CA.XX » fournit
dans les pacquages d’OpenSSL.
• En fonction des distributions, vous les trouverez dans
« /usr/lib/ssl/misc/ », dans « /usr/local/ssl/misc/ », dans
« /etc/ssl/misc/ », ou dans « /etc/openssl/misc ».
• Les paramètres de création de l’autorité de certification sont
déclarées dans le script « CA.xx » et dans le fichier de
configuration de « openssl.cnf ».
• Par défaut, l’arborescence de l’autorité de certification est créée
sous « ./demoCA » mais cela peut être changé dans le fichier de
configuration et dans le script de création de l’autorité.
23
mafalda ssl # pwd
/etc/ssl
mafalda ssl # tree (oubien gvfs-tree)
.
|-- misc
| |-- CA.pl
| |-- CA.sh
| |-- c_hash
| |-- c_info
| |-- c_issuer
| `-- c_name
`-- openssl.cnf
1 directory, 7 files
24
• Par exemple pour créer une autorité de
certification basée sur un certificat ayant une
durée de validité de 10 ans dont la racine est
« /etc/ssl/CertificateAuthority », modifier les
variables « CADAYS » et « CATOP » dans le
fichier du script « CA.pl » ou « CA.sh » ainsi
que la valeur de « dir » dans « openssl.cnf »
avant de lancer « /chemin/vers/CA.xx
-newca » :
25
mafalda ssl # /etc/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)
4 directories, 9 files
27
• Où :
• cacert.pem est la clé publique de votre autorité de
certification ;
• private/cakey.pem est la clé privée ;
• index.txt est le fichier d’index conservant l’association
certificat/propriétaire ;
• index.txt.attr est le fichier d’option des indexes ;
• serial est le numéro du prochain certificat créé ;
• certs est le répertoire des certificats signés et de leurs
hash associé.
28
Note sur le répertoire « certs »
• Afin de pouvoir vérifier une chaine de certification, on crée dans le répertoire « certs » un lien
symbolique pointant vers les certificats signés par la chaine de certification. Ce lien à pour nom «
hash.0 » où « hash » est le hachage du « DN » (Dir Name de la forme /C=FR/ST=Ile-De-
France/L=Paris/O=Admin Linux/OU=Service Informatique/CN=Marc
Dupond/emailAddress=marc.dupond@admin-linux.fr) du certificat.
29
Note sur les informations des certificats
• ATTENTION : Par défaut, la signature de plusieurs certificats créés avec EXACTEMENT LES MÊMES
PARAMÈTRES de sujet (countryName, stateOrProvinceName, organizationName, organizationalUnitName,
commonName, emailAddress) n’est pas autorisé !
• Pour des certificats machine, il est d’usage que le « commonName » désigne le nom de la machine
(souvent dans son entier nom.domaine) tandis que pour les utilisateurs ils désigne leurs « Prénom NOM ».
• Si toutefois vous devez impérativement créer deux certificats ayant le même sujet (même DN), passez la
valeur « unique_subject » à « no » dans le fichier « index.txt.attr » de votre autorité de certification.
• Sans cette modification, vous obtiendrez l’erreur suivante au moment de signer le certificat :
30
Création d’un certificat
• Pour générer une clé SSL utilisable par un service tel qu’Apache ou autre, nous commençons générer la clé privée :
• Note : l’option « -des3 », « -aes128 », etc, lors de la génération de la clé privée permet de spécifier un mot de passe pour l’utilisation de la clé. Ce mot de passe sera demandé à chaque démarrage du service.
• A partir de cette clé, création de la demande de signature qui sera transmise à l’autorité de certification :
• mafalda ~ # openssl req -key admin-linux.key -new -out admin-linux.csr -days 365
• You are about to be asked to enter information that will be incorporated
• into 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 blank
• For some fields there will be a default value,
• If you enter '.', the field will be left blank.
• -----
• Country Name (2 letter code) [FR]:
• State or Province Name (full name) [Some-State]:Ile-De-France
• Locality Name (eg, city) []:Paris
• Organization Name (eg, company) [Internet Widgits Pty Ltd]:Admin Linux
• Organizational Unit Name (eg, section) []:Service Informatique
• Common Name (eg, YOUR name) []:Marc Dupond
• Email Address []:marc.dupond@admin-linux.fr
•
• Please enter the following 'extra' attributes
• to be sent with your certificate request
• A challenge password []:
• An optional company name []:
• mafalda ~ # ls
• admin-linux.csr admin-linux.key
31
• Enfin, génération du certificat proprement dit :
• mafalda ~ # openssl req -x509 -in admin-linux.csr -key admin-linux.key > admin-linux.crt
32
Signature d’un certificat
• Récapitulons :
• L’objectif est maintenant de signer le certificat avec l’autorité de certification précédemment créé. Pour cela lancer la commande suivante (en remplaçant par vos paramètres les paramètres de l’exemple) :
33
• Rappel : Comme dit précédement, si vous
rencontrez à cette étape une erreur du type :
• failed to update database TXT_DB error
number 2
• C’est probablement que vous tentez de signer
un certificat créé avec le même « Subject » (ou
DN) qu’un autre.
34
• OpenSSL demande le mot de passe de l’autorité de certification puis après
vérification affiche le détail du certificat à signer. Le système nous avertis alors
que le certificat va être validé pour une durée de 365 jours et demande
confirmation. Une fois le certificat signé, il est ajouté à la base des certificats
gérés par l’autorité de certification.
35
• et constater que le certificat que nous venons
de signer à bien été ajouté à la liste. De
même, le numéro de série du prochain
certificat à bien été incrémenté :
• mafalda ~ # cat
/etc/ssl/CertificateAuthority/serial
• FDE4E44077BCB383
36
Diffuser sa chaine d’authentification
• Tous fonctionne pour le moment pour le mieux, mais lors de
la connexion à un site utilisant un certificat auto signé ou
signé par une autorité de certification non officielle, un
avertissement sera affiché à l’utilisateur.
• Cela est dû au fait que votre Autorité de Certification n’est
pas connue par les navigateurs Web du marché (à moins que
vous ne vous appeliez VeriSign ou quelque chose du genre).
• Pour résoudre ce problème, vous pouvez diffuser votre
chaîne de certification via un site internet. Copiez, ou vous le
souhaitez sur votre site web le certificat « cacert.pem » en
« cacert.crt ».
37
• Lors d’un clique sur ce fichier, le browser web
vous propose immédiatement d’ajouter la
chaîne de certification aux autorités
reconnues :
38
• Dès que l’autorité de certification est ajoutée, le navigateur
internet reconnais le certificat lors de son passage sur vos
page. Les détails sur l’autorité de certification sont consultable
via la liste des autorité racines comme présenté sur cette
capture d’écran réalisée sous firefox 3.X :
39
Questions diverses
40
Comment vérifier la signature d’un certificat
?
• Afin de vérifier la validité du certificat, nous faisons appel à l’option « verify
» d' »openssl » soit en lui précisant le la clé publique de l’autorité de
certification :
41
Comment tester un certificat ?
42
Comment s’informer sur un certificat ?
• Les différentes informations concernant un certificat peuvent être retrouvées via ses champs x509. Nous retrouvons ainsi :
• etc.
43
Comment télécharger un certificat ?
Un certificat peut être récupéré via l’option « s_client » d’OpenSSL (comme dans cet exemple sur le webmail de Yahoo) :
44
45