Cryptographie New
Cryptographie New
Cryptographie New
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
Vous pouvez utiliser les fonctionnalités suivantes :
• $ openssl genrsa -out <fichier_rsa.priv> <size> : génére la clé privé RSA de
taille size. les valeurs possible pour size sont : 512, 1024, etc.
• $ openssl rsa -in <fichier_rsa.priv> -des3 -out <fichier.pem> : chiffre la clef
privé RSA avec l’algorithme DES3. Vous pouvez utiliser DES, 3DES, IDEA, etc.
• $ openssl rsa -in <fichier_rsa.priv> -pubout -out <fichier_rsa.pub> : stocke
la partie publique dans un fichier à part (création de de la clé publique associée à la clef
privée dans le fichier fichier.pem).
• $ openssl enc <-algo> -in <claire.txt> -out <chiffre.enc> : pour le chiffrement
de claire.txt avec l’algorithme spécifié (openssl enc --help pour avoir la liste des
possibilités ou bien openssl list-cipher-commands) dans un fichier chiffre.enc.
• $ openssl enc <-algo> -in <chiffre> -d -out <claire> : pour le déchiffrement.
• $ openssl dgst <-algo> -out <sortie> <entrée> : pour hacher un fichier. L’option
<-algo> est le choix de l’algorithme de hachage (sha, sha1, dss1, md2,md4, md5,
ripemd160).
• $ openssl rand -out <clé.key> <nombre_bits> : pour générer un nombre aléatoire de
taille nombre_bits (utiliser l’option -base 64 pour la lisibilité).
• $ openssl aes-256-cbc -in <claire.txt> -out <chiffre.enc> -e -k <clé.key>:
pour chiffrer un fichier avec l’AES.
• $ openssl rsautl -encrypt -inkey <rsa.pub> -in <clair.txt> -out
<chiffre.enc> : chiffrer fichier.txt avec la RSA en utilisant la clef publique rsa.pub.
• $ openssl rsautl -decrypt -inkey <rsa.priv> -in <chiffre.enc> -out
<fihcier.txt> : pour déchiffrer le fichier fic.dec.
• $ openssl rsautl -sign -inkey <ras.priv> -in <fichier.txt> -out <fic.sig> :
pour générer une signature.
• $ openssl rsautl -verify -pubin -inkey <rsa.pub> -in fic fic.sig : pour vérifier
une signature.
3
Create and activate user
# groupadd info
# useradd –m –d /home/jacky
–g info –s /bin/bash
–p $(mkpasswd –m md5 p@ssw0rd) jacky
Remarque
-m : md5, sha-256, sha-512
Le Mot de passe doit être changé à la première connexion :
# passwd –e jacky
4
Objectifs
Maximus Lucilla
Message Message
Maximus Lucilla
Message Message
7
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
11
Kpub1 Maxim
Kpriv1 Maxim Processus-Côté Maximus
Kpub2 Lucilla
Maximus
file.sha
=? file.empreinte RSA
GOTO STEP 2
13
Processus-Côté Lucilla
Lucilla
file.aes
k.crypt
file.sign
k.session RSA file.sha
14
Processus-Côté Lucilla
Lucilla
file.aes
k.crypt
file.sign
AES k.session file.sha
Paquet reçu
file.txt
15
DIVERSES MANIPULATIONS
16
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'
puis redécoder
$ openssl base64 -d < test.b64
19
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)
20
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
21
AUTORITÉS DE CERTIFICATION
22
Générer certificat
Créer clé privé
$ openssl genrsa –des3 –out alger1.dz.key 2048
Créer la requête de certification
$ openssl req –new –key alger1.dz.key –out
commerce.dz.csr
Auto-signer le certificat
$ openssl x509 –req –days 365 –in
commerce.dz.csr –signkey alger1.dz.key –out
alger1.dz.cert
23
Création d’une autorité de certification
24
• 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é.
25
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
26
• 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 :
27
mafalda ssl # /etc/ssl/misc/CA.pl -newca
writing new private key to
'/etc/ssl/CertificateAuthority/private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
28
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/CertificateAuthority/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
fd:e4:e4:40:77:bc:b3:81
Validity
Not Before: Oct 13 11:23:24 2009 GMT
Not After : Oct 11 11:23:24 2019 GMT
Subject:
countryName = FR
stateOrProvinceName = Ile-De-France
organizationName = Admin Linux
organizationalUnitName = Service Informatique
commonName = FHH
emailAddress = fhh@admin-linux.fr
29
Qui aura pour effet de créer l’arborescence suivante :
mafalda ssl # tree /etc/ssl/CertificateAuthority/
/etc/ssl/CertificateAuthority/
|-- cacert.pem
|-- careq.pem
|-- certs
|-- crl
|-- crlnumber
|-- index.txt
|-- index.txt.attr
|-- index.txt.old
|-- newcerts
| `-- FDE4E44077BCB381.pem
|-- private
| `-- cakey.pem
`-- serial
4 directories, 9 files
30
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é.
31
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.
• Le « hash » du certificat est retourné par :
openssl x509 -hash -noout -in certif.{pem,crt}
• Dans l’exemple ci dessus nous obtenons :
mafalda CertificateAuthority # openssl x509 -hash -noout -in
cacert.pem 5a558f7f
• et créons donc le lien « /etc/ssl/CertificateAuthority/certs/5a558f7f.0
» pointant vers « /etc/ssl/CertificateAuthority/cacert.pem » 32
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 :
Certificate is to be certified until Oct 21 15:36:37 2010 GMT (365 days)
Sign the certificate? [y/n]:y
• 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 34
• to be sent with your certificate request
• Enfin, génération du certificat proprement dit :
• mafalda ~ # openssl req -x509 -in admin-linux.csr -key admin-linux.key > admin-linux.crt
35
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) :
36
• 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.
37
• 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.
38
• 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
39
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 ».
40
• 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 :
41
• 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 :
42
Questions diverses
43
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 :
44
Comment tester un certificat ?
45
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.
46
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) :
47
48
1. Présentation de openssl
1.1 Protocole SSL
• Le protocole SSL (Secure Socket Layer) a été développé par la société Netscape
Communications Corporation pour permettre aux applications client/serveur de
communiquer de façon sécurisée. TLS (Transport Layer Security) est une évolution de
SSL réalisée par l'IETF.
• La version 3 de SSL est utilisée par les navigateurs tels Netscape et Microsoft Internet
Explorer depuis leur version 4.
• SSL est un protocole qui s'intercale entre TCP/IP et les applications qui s'appuient sur
TCP. Une session SSL se déroule en deux temps
1. une phase de poignée de mains (handshake) durant laquelle le client et le serveur
s'identifient, conviennent du système de chiffrement et d'une clé qu'ils utiliseront par
la suite.
2. la phase de communication proprement dite durant laquelle les données
échangées sont compressées, chiffrées et signées.
• L'identification durant la poignée de mains est assurée à l'aide de certificats X509.
49
1. Présentation de openssl
1.2 openSSL :
• openSSL est une boîte à outils cryptographiques implémentant les protocoles SSL et TLS
qui offre
– une bibliothèque de programmation en C permettant de réaliser des applications client/serveur
sécurisées s'appuyant sur SSL/TLS.
– une commande en ligne (openssl) permettant
• la création de clés RSA, DSA (signature)
• la création de certificats X509
• le calcul d'empreintes (MD5, SHA, RIPEMD160, ...)
• le chiffrement et déchirement (DES, IDEA, RC2, RC4, Blowsh, ...)
• la réalisation de tests de clients et serveurs SSL/TLS
• la signature et le chiffrement de courriers (S/MIME)
• Pour connaître toutes les fonctionnalités de openSSL : man openssl.
• La syntaxe générale de la commande openssl est
$ openssl <commande> <options>
• Dans le texte qui suit, les commandes invoquant openssl supposent que cette commande
est dans votre PATH.
50
2. RSA avec openSSL
2.1 Génération d'une paire de clés
• On peut générer une paire de clés RSA avec la commande
genrsa de openSSL.
• $ openssl genrsa -out <fichier > <taille >
• où fichier est un nom de fichier de sauvegarde de la clé, et
taille et la taille souhaitée (exprimée en bits) du modulus
de la clé.
• Par exemple, pour générer une paire de clés de 1024 bits,
stockée dans le fichier maCle.pem, on tape la commande
• $ openssl genrsa -out maCle.pem 1024
51
• Le fichier obtenu est au format PEM (Privacy Enhanced Mail, format
en base 64), voici un exemple
$ cat maCle.pem
----BEGIN RSA PRIVATE KEY----
MIICXAIBAAKBgQCveVjLltevTC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO
7AfKWpA5g0wFZgZNERIfFYaCnvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvP
d8LgBypJHbr6f5MXWqntvzp0Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQAB
AoGANchUrfnq28DWy0fE0R+cscvC292Z8jN8vrIBWxEk8iSlKU0om6v+a0g8wlP6
3gC6V66uxjY7xxdf7SD+/UykVl4PGFymhLtywSdGlgec3tLgBtV3ytJFilAVDBij
LzQwUegCO4zt1JWYc6vvaVdNyQSaGIIeYGsNDWEYlOtDSlkCQQDVRn9JS15G8p+H
4Z0PbU9ZQg2L1u9/SD/kELVe3Kx1fdHulxH0v8V2AgPdXA29Nhi+TxUtC+V8CMc2
KXmAvFsHAkEA0qBDmjHMDPwcGaqbQ2lymYQIGlZ5TLQFA98Dey2uE+CB6pmS/e/Z
ilu1IaasuE3vBzXfB/JU7DUkV++JQ7TtvQJBAL2s5dUch2sXqlOhjhpDP/eE7CE6
9WLAsbm2Nmd4YJRZYtQLXPfLeeSapC9BCCMHsnfGQ3H9i4mFEQ6VUi7w1Q8CQAQa
pVaS09QI8Y86eM4GdvowzWud9b0d4N8jcFDtIfA3NrDYjzmte8KraMsgEUuCET9F
uHPSL/9uRagE/dq44s0CQCMQU4PMqkMtwzCFsV8ZqLmkDPn1binIAwRLYFcsQRDt
gTi6rycz3Pk1hCVzBfyMd8zwqpwKmR5FoOXuJEv+mVg=
----END RSA PRIVATE KEY----
52
2.2 Visualisation des clés RSA
• La commande rsa permet de visualiser le
contenu d'un fichier au format PEM contenant
une paire de clés RSA.
• $ openssl rsa -in <fichier > -text -noout
• L'option text demande l'affichage décodé de la
paire de clés. L'option noout supprime la sortie
normalement produite par la commande rsa.
53
Par exemple
$ openssl rsa -in maCle.pem –text -noout exponent1 :
Private-Key : (1024 b i t ) 0 0 : bd : ac : e5 : d5 : 1 c : 8 7 : 6 b : 1 7 : aa : 5 3 : a1 : 8 e : 1 a : 4 3 :
modulus : 3 f : f 7 : 8 4 : ec : 2 1 : 3 a : f 5 : 6 2 : c0 : b1 : b9 : b6 : 3 6 : 6 7 : 7 8 :
0 0 : a f : 7 9 : 5 8 : cb : 9 6 : d7 : a f : 4 c : 2 e : 6 4 : 4 8 : 0 8 : 9 3 : 6 2 : 6 0 : 9 4 : 5 9 : 6 2 : d4 : 0 b : 5 c : f 7 : cb : 7 9 : e4 : 9 a : a4 : 2 f : 4 1 :
0 8 : 2 3 : 0 7 : b2 : 7 7 : c6 : 4 3 : 7 1 : fd : 8 b : 8 9 : 8 5 : 1 1 : 0 e : 9 5 :
3 1 : cc : 5 6 : e0 : 1 1 : f 3 : 4 0 : c7 : 3 0 : b5 : 8 2 : a7 : 7 0 : 4 e : 5 5 :
52 :2 e : f 0 : d5 : 0 f
9 e : 3 d : 7 9 : 7 c : 2 b : 6 9 : 7 c : 4 e : ec : 0 7 : ca : 5 a : 9 0 : 3 9 : 8 3 : exponent2 :
4c:05:66:06:4d:11:12:1f:15:86:82:9e:f6:90:0d: 04 :1 a : a5 : 5 6 : 9 2 : d3 : d4 : 0 8 : f 1 : 8 f : 3 a : 7 8 : ce : 0 6 : 7 6 :
00 :3 e : f 4 : 1 4 : 4 8 : 7 e : c4 : 9 2 : a f : 7 a : 1 2 : c3 : 4 3 : 3 2 : e5 : f a : 3 0 : cd : 6 b : 9 d : f 5 : bd : 1 d : e0 : df : 2 3 : 7 0 : 5 0 : ed : 2 1 :
2 0 : f a : 7 a : 0 d : 7 9 : bf : 4 5 : 6 6 : 2 6 : 6 b : c f : 7 7 : c2 : e0 : 0 7 : f 0 : 3 7 : 3 6 : b0 : d8 : 8 f : 3 9 : ad : 7 b : c2 : ab : 6 8 : cb : 2 0 : 1 1 :
2a : 4 9 : 1 d : ba : f a : 7 f : 9 3 : 1 7 : 5 a : a9 : ed : bf : 3 a : 7 4 : 4 2 : 4b : 8 2 : 1 1 : 3 f : 4 5 : b8 : 7 3 : d2 : 2 f : f f : 6 e : 4 5 : a8 : 0 4 : fd :
da : b8 : e2 : cd
f 8 : 3 a : 7 5 : d7 : 8 d : a5 : 4 2 : 2 b : aa : 4 9 : 2 1 : e2 : e0 : df : 1 c :
coefficient :
5 0 : d6 : ab : 2 a : e4 : 4 1 : 4 0 : a f : 2 b 2 3 : 1 0 : 5 3 : 8 3 : cc : aa : 4 3 : 2 d : c3 : 3 0 : 8 5 : b1 : 5 f : 1 9 : a8 :
publicExponent : 65537 (0 x10001 ) b9 : a4 : 0 c : f 9 : f 5 : 6 e : 2 9 : c8 : 0 3 : 0 4 : 4 b : 6 0 : 5 7 : 2 c : 4 1 :
privateExponent : 1 0 : ed : 8 1 : 3 8 : ba : a f : 2 7 : 3 3 : dc : f 9 : 3 5 : 8 4 : 2 5 : 7 3 : 0 5 :
3 5 : c8 : 5 4 : ad : f 9 : ea : db : c0 : d6 : cb : 4 7 : c4 : d1 : 1 f : 9 c : f c : 8 c : 7 7 : cc : f 0 : aa : 9 c : 0 a : 9 9 : 1 e : 4 5 : a0 : e5 : ee : 2 4 :
b1 : cb : c2 : db : dd : 9 9 : f 2 : 3 3 : 7 c : be : b2 : 0 1 : 5 b : 1 1 : 2 4 : 4b : f e : 9 9 : 5 8
f 2 : 2 4 : a5 : 2 9 : 4 d : 2 8 : 9 b : ab : f e : 6 b : 4 8 : 3 c : c2 : 5 3 : f a :
de : 0 0 : ba : 5 7 : ae : ae : c6 : 3 6 : 3 b : c7 : 1 7 : 5 f : ed : 2 0 : f e :
fd : 4 c : a4 : 5 6 : 5 e : 0 f : 1 8 : 5 c : a6 : 8 4 : bb : 7 2 : c1 : 2 7 : 4 6 :
9 6 : 0 7 : 9 c : de : d2 : e0 : 0 6 : d5 : 7 7 : ca : d2 : 4 5 : 8 a : 5 0 : 1 5 :
0 c : 1 8 : a3 : 2 f : 3 4 : 3 0 : 5 1 : e8 : 0 2 : 3 b : 8 c : ed : d4 : 9 5 : 9 8 :
7 3 : ab : e f : 6 9 : 5 7 : 4 d : c9 : 0 4 : 9 a : 1 8 : 8 2 : 1 e : 6 0 : 6 b : 0 d :
0d : 6 1 : 1 8 : 9 4 : eb : 4 3 : 4 a : 5 9
prime1 :
0 0 : d5 : 4 6 : 7 f : 4 9 : 4 b : 5 e : 4 6 : f 2 : 9 f : 8 7 : e1 : 9 d : 0 f : 6 d :
4 f : 5 9 : 4 2 : 0 d : 8 b : d6 : e f : 7 f : 4 8 : 3 f : e4 : 1 0 : b5 : 5 e : dc :
ac : 7 5 : 7 d : d1 : ee : 9 7 : 1 1 : f 4 : bf : c5 : 7 6 : 0 2 : 0 3 : dd : 5 c :
0d : bd : 3 6 : 1 8 : be : 4 f : 1 5 : 2 d : 0 b : e5 : 7 c : 0 8 : c7 : 3 6 : 2 9 :
7 9 : 8 0 : bc : 5 b : 0 7
prime2 :
0 0 : d2 : a0 : 4 3 : 9 a : 3 1 : cc : 0 c : f c : 1 c : 1 9 : aa : 9 b : 4 3 : 6 9 :
7 2 : 9 9 : 8 4 : 0 8 : 1 a : 5 6 : 7 9 : 4 c : b4 : 0 5 : 0 3 : df : 0 3 : 7 b : 2 d :
ae : 1 3 : e0 : 8 1 : ea : 9 9 : 9 2 : fd : e f : d9 : 8 a : 5 b : b5 : 2 1 : a6 :
ac : b8 : 4 d : e f : 0 7 : 3 5 : df : 0 7 : f 2 : 5 4 : ec : 3 5 : 2 4 : 5 7 : e f :
8 9 : 4 3 : b4 : ed : bd 54
• Les différents éléments de la clé sont affichés en
hexadécimal (hormis l'exposant public). On peut
distinguer le modulus, l'exposant public (qui par défaut
est toujours 65537 voir NB), l'exposant privé, les nombres
premiers facteurs du modulus, plus trois autres nombres
qui servent à optimiser l'algorithme de déchiffrement.
• NB : openssl n'autorise que deux exposants publics :
65537 (valeur par défaut) ou 3 obtenu avec l'option 3
• Exercice 1. Donnez une explication du choix de la valeur
65537 pour exposant public par défaut.
55
2.3 Chiffrement d'un chier de clés RSA
• Il n'est pas prudent de laisser une paire de clés en clair (surtout la partie privée). Avec la
commande rsa, il est possible de chiffrer une paire de clés (*) . Pour cela trois options sont
possibles qui précisent l'algorithme de chiffrement symétrique à utiliser : des, des3 et idea.
$ openssl rsa -in maCle.pem -des3 -out maCle.pem
writing RSA key
Enter PEM pas s phrase :
Verifying - Enter PEM pass phrase :
(*) Il est possible de chirer le chier lors de sa génération. Il sut de mettre l'une des trois options des,
des3, idea dans la ligne de commande genrsa.
• Une phrase de passe est demandée deux fois pour générer une clé symétrique protégeant l'accès
à la clé.
• Exercice 2. Avec la commande cat observez le contenu du chier maCle.pem. Utilisez à nouveau la
commande rsa pour visualiser le contenu de la clé.
56
2.4 Exportation de la partie publique
• La partie publique d'une paire de clés RSA est
publique, et à ce titre peut être communiquée à
n'importe qui. Le chier maCle.pem contient la partie
privée de la clé, et ne peut donc pas être
communiqué tel quel (même s'il est chiffré). Avec
l'option pubout on peut exporter la partie publique
d'une clé.
• $ openssl rsa -in maCle.pem –pubout -out
maClePublique.pem
57
• Exercice 3.
• Question 1. Notez le contenu du chier
maClePublique.pem. Remarquez les marqueurs
de début et de n.
• Question 2. Avec la commande rsa visualisez la
clé publique. Attention vous devez préciser
l'option pubin, puisque seule la partie publique
figure dans le chier maClePublique.pem.
58
2.5 Chirement/déchirement de données avec RSA
• On peut chiffrer des données avec une clé RSA. Pour cela on utilise la
commande rsautl
• $ openssl rsautl –encrypt -in <fichier_entree> -inkey <cle> -out <fichier_sortie>
Où :
• fichier_entree est le fichier des données à chiffrer. Attention, le fichier des
données à chiffrer ne doit pas avoir une taille excessive (ne doit pas dépasser
116 octets pour une clé de 1024 bits).
• cle est le fichier contenant la clé RSA. Si ce fichier ne contient que la parte
publique de la clé, il faut rajouter l'option pubin.
• fichier_sortie est le chier de données chiffré.
• Pour déchiffrer on remplace l'option encrypt par decrypt.
• Le fichier contenant la clé doit évidemment contenir la partie privée.
59
• Exercice 4. Chiffrez le fichier de votre choix avec le système symétrique de votre
choix. Chiffrez la clé ou le mot de passe utilisé(e) avec la clé publique de votre
destinataire (demandez-lui sa clé publique si vous ne l'avez pas). Envoyez-lui le
mot de passe chiffré ainsi que le fichier chiffré.
• Exercice 5. Il s'agit de déchirer le chier cryptogram14. Pour cela vous devez
récupérer les fichiers suivants (attention la plupart de ces fichiers sont des fichiers
binaires) le fichier cryptogram14 (chier binaire) a été obtenu en chiffrant un texte
avec openssl et la commande enc. Le système de chiffrement symétrique utilisé
est BlowFish en mode CBC avec un vecteur d'initialisation nul (voir TP2) ;
• la clé BlowFish a été dérivée à partir d'un mot de passe dont voici la version
chiffrée ;
• la clé privée RSA qui a servi à chiffrer le mot de passe ;
• le mot de passe protégeant la clé RSA, codé en base 64, est
TGlsbGUxLUZJTC1QQUM= .
60
2.6 Signature de fichiers
• Il n'est possible de signer que de petits documents. Pour signer un gros document on calcule
d'abord une empreinte de ce document. La commande dgst permet de le faire.
• $ opens s l dgs t <hachage> out <empreinte> <f i c h i e r_ent r e e >
• où hachage est une fonction de hachage. Avec openssl, plusieurs fonctions de hachage sont
proposées dont MD5 (option md5), qui calcule des empreintes de 128 bits, SHA1 (option sha1),
qui calcule des empreintes de 160 bits, RIPEMD160 (option ripemd160), qui calcule des
empreintes de 160 bits.
• Signer un document revient à signer son empreinte. Pour cela, on utilise l'option sign de la
commande rsautl
• $ openssl rsautl –sign -in <empreinte> -inkey <cle> -out <signature>
• et pour vérifier la signature
• $ openssl rsautl –verify -in <signature> -pubin -inkey <cle> -out <empreinte>
• il reste ensuite à vérifier que l'empreinte ainsi produite est la même que celle que l'on peut
calculer.
• L'option pubin indique que la clé utilisée pour la vérification est la partie publique de la clé
utilisée pour la signature.
61
• Exercice 6. Signez le chier de votre choix, puis vériez
la signature.
• Exercice 7. Récupérez l'archive signatures.zip qui
contient deux fichiers accompagnés d'une signature
– fichier : cigale.txt, signature : signature1
– et fichier : QuandLaMerMonte.txt, signature : signature2,
• ainsi que la partie publique de la clé RSA ayant
produit la signature : uneClePublique.pem. De ces
deux fichiers, lequel a bien été signé ?
62
3 Certicats
• Vous allez maintenant élaborer un certificat pour votre clé
publique. Puis, vous verrez comment utiliser les clés certifiées
pour signer et/ou chiffrer des courriers électroniques.
3.1 Génération de la paire de clés
• Exercice 8. Générez votre paire de clés RSA d'une taille de 2048
bits, protégée par un mot de passe (cf génération d'une paire de
clés). Dans la suite, on suppose nommé maCle.pem le chier
contenant votre paire de clés RSA. Ce chier est protégé par le mot
de passe fourni lors de la génération.
• Exercice 9. Créez un chier ne contenant que la partie publique de
votre clé RSA (cf Exportation de la clé publique). Dans la suite, on
suppose ce chier nommé maClePublique.pem.
63
3.2 Création d'une requête de certicats
• Maintenant que vous disposez d'une clé RSA, vous allez établir une requête pour obtenir un certicat.
• Outre la clé publique du sujet, un certicat contient un certain nombre d'informations concernant
• l'identité de son propriétaire :
• Pays (C),
• État ou province (ST)
• Ville ou localité (L)
• Organisation (O)
• Unité (OU)
• Nom (CN)
• Email
• Toutes ces informations et d'autres encore sont demandées lors de la création de la requête. Un chier
• de conguration (req.cnf) peut-être déni qui propose les informations à apporter dans le certicat avec
• des valeurs par défaut.
• On établit une requête avec la commande req de openssl.
• $ opens s l req c o n f i g req . cnf new key maCle . pem out maRequete . pem
• Le chier produit maRequete.pem est aussi au format PEM.
64
• $ cat maRequete . pem
• BEGIN CERTIFICATE REQUEST
• MIIB/zCCAWgCAQAwgb4xCzAJBgNVBAYTAkZSMRIwEAYDVQQIEwlOb3JkICg1OSkx
• GjAYBgNVBAcTEVZpbGxlbmV1dmUgZCdBc2NxMR4wHAYDVQQKExVVbml2ZXJzaXRl
• IGRlIExpbGxlIDExGTAXBgNVBAsTEExpY2VuY2UgUHJvIERBMkkxGjAYBgNVBAMT
• EUVyaWMgV2Vncnp5bm93c2tpMSgwJgYJKoZIhvcNAQkBFhlFcmljLldlZ3J6eW5v
• d3NraUBsaWZsLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCveVjLltev
• TC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO7AfKWpA5g0wFZgZNERIfFYaC
• nvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvPd8LgBypJHbr6f5MXWqntvzp0
• Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQABoAAwDQYJKoZIhvcNAQEEBQAD
• gYEAHOwGNN6A8d4EhjfXCRvC2fhIjt7i6jxfkHKBkHpm2yNBBDHQwiv+O/Y0MeNh
• I r a+y8KUMjeImsSiH4731sfgA6ycm+6JoDV7n6z8tzN5QMGsw7V3ErduskayKP4T
• j a+BMImEcDwlr+KuRO704rGeiAG7pvtDGcDcj2Mex68ki94=
• END CERTIFICATE REQUEST
65
• On peut consulter les informations contenues dans la requête avec la commande
• $ opens s l req c o n f i g req . cnf in maRequete . pem t ext noout
• Ce r t i f i c a t e Request :
• Data :
• Ver s ion : 0 (0 x0 )
• Subj e c t : C=FR, ST=Nord ( 5 9 ) , L=Vi l l eneuv e d ' Ascq , O=Un i v e r s i t e de L i l l e 1 , OU=Li inf o , CN=Er i c Wegrzynowski/ emai lAddres s=Er i c . Wegrzynowski@l i f l . f r
• Subj e c t Publ i c Key Inf o :
• Publ i c Key Algorithm : r saEnc rypt ion
• RSA Publ i c Key : (2048 b i t )
• Modulus (2048 b i t ) :
• 0 0 : b4 : f 3 : e0 : 6 5 : 5 0 : 1 2 : f 6 : 5 1 : c2 : 9 6 : 9 0 : 7 7 : 5 b : c3 :
• 2 5 : 4 6 : 1 7 : 1 f : 3 b : 0 e : b9 : a0 : 5 a : f a : 2 7 : 1 4 : 2 c : 4 5 : 9 6 :
• 8 8 : 6 8 : 9 c : 6 0 : b1 : 8 a : 9 4 : 2 c : 2 2 : 7 6 : f 0 : de : 7 e : 0 2 : 1 b :
• 1d : 1 d : 5 7 : b6 : b8 : 8 d : 5 5 : 7 e : 1 5 : a4 : 5 d : a1 : ce : 0 2 : 7 1 :
• cd : 5 6 : 3 0 : dc : 6 7 : 6 4 : fb : cb : c7 : bc : 6 4 : 7 5 : 2 3 : 4 c : 2 f :
• a5 : 0 6 : 4 7 : a6 : 3 9 : 4 6 : 7 4 : f 1 : 8 a : 9 1 : ed : ad : 8 f : 7 d : d3 :
• 3 4 : c0 : 8 7 : 7 9 : 6 1 : a7 : b9 : 8 c : 1 d : 8 c : 4 5 : 0 d : c4 : df : a8 :
• ea : 2 2 : 0 c : 5 b : f 2 : 0 c : 6 b : 1 1 : 8 e : 2 b : f 6 : 6 a : 9 e : b0 : 1 d :
• e f : 5 3 : e7 : ba : 3 2 : 2 8 : ee : 9 8 : d4 : 8 3 : 1 0 : 6 3 : 6 4 : c2 : 4 f :
• 4 4 : 1 2 : 5 1 : f 2 : a6 : 3 1 : 6 8 : 3 0 : d2 : f 9 : 8 d : 7 a : bf : 2 3 : 0 9 :
• 1 8 : a4 : ab : 0 a : 2 1 : f c : 2 5 : 8 8 : ba : 0 9 : 5 a : 7 0 : 8 2 : 3 3 : 4 1 :
• 9 3 : f 8 : d8 : 0 a : b4 : 3 8 : ae : 4 7 : 8 c : 4 a : d1 : 8 8 : d1 : a f : b6 :
• 1 8 : 7 7 : b8 : 8 4 : 4 e : 7 a : ad : c0 : a6 : 2 3 : e7 : 9 4 : 6 c : 7 6 : cb :
• 0d : da : 1 6 : 1 6 : cb : a5 : 0 f : 7 5 : a6 : e0 : 7 8 : f f : 3 3 : e1 : d1 :
• 5b : 3 c : 8 d : dd : 0 6 : 7 a : 7 2 : e2 : be : 4 8 : c3 : 1 7 : 4 a : 4 f : bb :
• e0 : bb : fb : e6 : bd : 7 e : d4 : f 8 : c1 : 2 a : 5 a : 4 f : 6 a : 3 a : e0 :
• 2 0 : e6 : 6 3 : e5 : d5 : 6 5 : ee : d3 : 8 c : 7 2 : 2 2 : 5 4 : ca : f 2 : 4 0 :
• e f : c1
• Exponent : 65537 (0 x10001 )
• At t r ibut e s :
• a0 : 0 0
66
• Signatur e Algorithm : sha1WithRSAEncryption
• 54 :1 b : b8 : 5 2 : 2 8 : f 1 : 2 9 : e9 : 5 c : 2 8 : bc : e3 : f 6 : 5 8 : cd : 0 f : e8 : 2 c :
• a8 : 8 3 : 1 d : d6 : f 3 : 6 b : 4 6 : f 8 : d5 : c6 : 3 7 : bb : 1 5 : f 5 : 3 4 : 5 8 : 5 6 : 3 d :
• 7b : f 1 : ce : 1 d : bf : 1 4 : 0 9 : f e : f e : f 3 : f 1 : 0 7 : 5 4 : 2 7 : 6 0 : 4 5 : 6 a : e f :
• 88 :8 b : b7 : 8 9 : 7 4 : 7 7 : 5 e : 4 d : a5 : 5 c : ea : 5 c : b8 : 1 c : 7 a : 5 7 : b3 : 8 3 :
• 0d : 2 e : 1 e : 6 2 : 8 6 : f 4 : 0 1 : d4 : 4 d : 3 9 : 5 1 : 2 5 : 0 4 : cb : 0 0 : 3 3 : 2 a : 8 4 :
• 5 c : ae : 0 a : a0 : 6 f : 6 5 : c7 : 7 0 : 0 a : c f : 5 6 : 9 5 : d1 : 7 0 : 2 2 : 0 5 : e1 : f c :
• 2a : d8 : 9 b : 2 1 : 3 e : 0 5 : bb : 5 c : 9 7 : b4 : 3 5 : 6 7 : 8 5 : e3 : 1 f : 8 b : 8 2 : 3 1 :
• e f : 7 6 : 0 b : 1 7 : 5 3 : a2 : 0 6 : 4 3 : 7 9 : 1 e : cb : a5 : 4 5 : 1 d : 6 a : c9 : d1 : 0 4 :
• 0 c : 4 4 : d7 : 8 7 : 4 4 : 2 c : 4 b : e f : 3 8 : 5 b : 7 2 : 3 8 : de : f f : 7 4 : ae : 5 9 : 1 7 :
• 1 2 : f 5 : 8 7 : 8 c : 0 0 : 5 6 : 0 0 : 3 f : f 0 : d4 : 0 8 : d2 : c1 : 4 b : ae : 8 4 : 0 f : f 3 :
• d5 : dd : ea : 4 8 : 0 b : 8 6 : 3 1 : 8 2 : c5 : f 5 : ae : 1 d : 5 2 : b2 : c6 : 7 4 : 6 2 : d1 :
• f 7 : 9 4 : 4 3 : b2 : 5 d : 9 a : e5 : 5 2 : c1 : 4 8 : 1 0 : f f : 2 7 : bb : d5 : ec : 0 0 : b8 :
• aa : 8 8 : 7 7 : c3 : 3 6 : f 9 : 8 7 : 4 1 : d9 : da : 5 8 : 9 a : c3 : 2 6 : 8 c : ba : e3 : 1 9 :
• f e : 2 5 : 4 2 : 2 5 : 1 2 : b4 : d4 : 7 9 : e1 : d9 : b9 : 9 4 : d8 : 8 3 : 9 0 : 3 6 : ac : ca :
• c6 : a7 : b2 : 9 c
• Exercice 10. Expliquez les diérents éléments contenus dans cette requête. La clé privée du sujet y gure
• telle ?
67
• 3.3 Demande de signature de certicat
• Une fois que vous avez établi une requete de
certicat, il vous reste à contacter une autorité
de certi-
• cation qui vous délivrera un certicat signé,
après avoir procédé (normalement) à
quelques vérications
• vous concernant.
68
• L'autorité de certication Père Ubu Vous jouerez dans ce TP le rôle de l'autorité de certication.
• Pour cela il vous faut un certicat d'autorité de certication, ainsi qu'une paire de clés. An de ne
pas
• multiplier les autorités, vous utilisereztous la très notable autorité Père Ubu dont vous
trouverez ici le
• certicat et la paire de clés RSA.
• Un certicat produit par openssl est un chier au format PEM.
• $ cat unCe r t i f . pem
• BEGIN CERTIFICATE
• ....
• END CERTIFICATE
• Pour visualiser le contenu d'un certicat
• $ opens s l x509 in unCe r t i f . pem t ext noout
• Exercice 11. Après avoir récupéré le certicat de l'autorité, ainsi que sa paire de clés RSA,
cherchez quelle
• est la date d'expiration du certicat et la taille de la clé.
69
• Création d'un certicat Pour créer et signer un certicat à partir d'une requête maRequete.pem,
• l'autorité invoque la commande x509
• $ opens s l x509 days 10\
• CAs e r ial PereUbu . s r l \
• CA PereUbuCer t i f . pem CAkey PereUbuCle . pem\
• e x t f i l e us r . ext e x t ens i ons x509_ext\
• in maRequete . pem req out monCer t i f . pem
• dans laquelle
• l'option days
• détermine la durée de validité du certicat (ici 10 jours) ;
• PereUbu.srl est un chier contenant le numéro de série du prochain certicat à signer (ce chier
• est un chier texte contenant une ligne donnant un nombre codé avec un nombre pair de chires
• hexadécimaux) ;
• et usr.ext est un chier contenant une description des extensions au certicat décrivant entre
• autres les usages auxquels sont destinés les certicats, l'option extension
• précisant le nom de la
• section dans laquelle se trouvent les diérentes extensions (voici un exemple de tel chier).
• Exercice 12. Crééz un certicat pour votre clé publique. (Lors de la signature du certicat, la commande
• x509 invite l'autorité certiante à donner son mot de passe. Le mot de passe de Père Ubu ne devrait
• pas vous être inconnu, puisqu'il s'agit DU mot du Père Ubu (celui prononcé au tout début d'Ubu Roi).
• Néanmoins, le voici codé en base 64 bWVyZHJlCg== S'il le faut, utilisez la commande openssl base64 d
• pour le décoder.)
• Puis contrôlez le contenu du certicat obtenu avec les options appropriées de la commande x509.
70
• Vérication de certicats On peut vérier la
validité d'un certicat avec la commande verify.
Pour
• vérier la validité d'un certicat, il est nécessaire
de disposer du certicat de l'autorité qui l'a
émis.
• $ opens s l v e r i f y CAf i l e PereUbuCer t i f .
pem monCer t i f . pem
71
• 3.4 Signature et chirement de courriers électroniques
• Lorsque vous disposez d'une paire de clés
publique/privée, et d'un certicat qui les accompagne,
et
• qui atteste de votre adresse électronique, il vous est
possible, entre autres choses, de signer vos mails, et
• de recevoir des mails chirés de la part de vos
correspondants qui disposent de votre certicat.
72
• 3.4.1 Avec openssl
• Signature de courriers Vous disposez d'un certicat monCertif.pem, d'une clé privée maCle.pem
• et vous voulez envoyer un courrier signé dont le contenu est dans le chier blabla.txt à l'adresse
• haha@palotin.pl. En supposant que tous les chiers se trouvent dans le répertoire courant, il sut
• d'invoquer la commande
• $ opens s l smime s i gn in bl abl a . txt t ext \
• s i g n e r monCer t i f . pem inkey maCle . pem\
• from moi@palotin . pl \
• to haha@palotin . pl \
• s u b j e c t " c o u r r i e r s i gne "
• Il est bien videmment possible de rediriger la sortie de la comande précédente vers un chier (avec
• l'option out
• par exemple), ou vers la commande mail.
• Vérication de courriers signés Pour vérier un courrier signé, il faut disposer du certicat que
• l'émetteur a utilisé pour signer, ainsi que celui de l'autorité ayant émis ce certicat. On invoque la
• commande
• $ opens s l smime v e r i f y in c o u r r i e r . s i gne \
• CAf i l e PereUbuCer t i f . pem
• Chirement de courriers Pour envoyer un courrier chiré, par exemple avec du Triple-DES, à un
• destinataire dont on dispose d'un certicat sonCertif.pem, il sut d'invoquer la commande
73
• $ opens s l smime enc rypt in bl abl a . txt t ext \
• from moi@palotin . pl \
• to haha@palotin . pl \
• s u b j e c t " c o u r r i e r c h i f f r e " \
• des3 s o nCe r t i f . pem
• Il est bien videmment possible de rediriger la sortie de la comande précédente vers un chier (avec
• l'option out
• par exemple), ou vers la commande mail.
• Déchirement de courriers Pour déchirer un courrier chiré
• $ opens s l smime de c rypt in c o u r r i e r . c h i f f r e \
• r e c i p s o nCe r t i f . pem \
• inkey maCle . pem
• où maCle.pem est ma clé privée RSA, et sonCertif.pem est le certicat de l'émetteur.
• Remarque Lorsqu'on chire un courrier électronique, il faut s'assurer que le destinataire est en
mesure
• de le déchirer, autrement dit que le logiciel du destinataire est en mesure de le faire.
74
• 3.4.2 Avec Mozilla Thunderbird
• La première chose à faire pour pouvoir échanger des courriers signés et/ou chirés avec
Mozilla
• Thunderbird est d'importer votre certicat et votre clé privée que vous venez d'obtenir dans
la base de
• données de certicats gérées par votre navigateur.
• La base de données de certicats Vous pouvez consulter cette base de données par le menu
• Edition/Preferences.
• Vous pouvez alors consulter
• vos certicats (a priori aucun),
• ceux des personnes dont vous en avez obtenu un,
• ceux de serveurs WEB sécurisés que vous avez eu l'occasion de rencontrer,
• et enn, ceux des autorités de certication que vous connaissez (il y en a plusieurs dizaines
normalement,
• mais cette liste ne contient pas le Père Ubu)
75
• Importation d'un certicat Pour importer votre certicat dans votre base de données, il faut créer
• d'abord une enveloppe PKCS#12. Il s'agit d'une norme de chier adoptée pour "celer" ensemble un
ou
• plusieurs certicats et clés.
• Pour créer une enveloppe PKCS#12 contenant votre certicat, votre clé privée, et le certicat de
• l'autorité ayant signé le votre, il sut d'invoquer la commande
• $ opens s l pkcs12 expor t in monCer t i f . pem \
• inkey maCle . pem c e r t f i l e PereUbuCer t i f . pem \
• name "EW" caname "Pere Ubu" out monEnveloppe . p12
• Un mot de passe protégeant cette enveloppe vous est demandé.
• Une fois cette enveloppe réalisée, il reste à importer tout cela dans la base de données de certicats
• de votre navigateur. Pour cela passez par le menu sécurité. Un mot de passe vous sera demandé
pour la
• base de données, puis celui que vous avez utilisé pour protéger l'enveloppe PKCS#12.
• Cela réalisé, vous devez voir maintenant votre certicat dans la liste des votres. Demandez à le
• visualiser, puis à le vérier. Votre certicat n'est pas valide car ...
76
• Acceptation de l'autorité Père Ubu ... l'autorité Père Ubu n'est pas acceptée par votre
navigateur.
• Pour que Père Ubu soit accepté vous devez éditer son certicat (depuis la liste des
certicats d'autorités
• signataires) et cocher la case concernant l'acceptation de cette autorité pour les
emails.
• Vériez maintenant votre certicat.
• Vériez aussi la signature du mail de mercredi dernier.
• Envoyer un courrier signé Pour envoyer un courrier signé, il sut de cocher la cas
adéquate qui
• apparaît lorsqu'on coche la case sécurité (en bas à gauche) de la fenêtre de
composition du mail.
• Envoyer un mail chiré Pour envoyer un courrier chiré, il sut de faire la même chose.
ATTENTION,
• vous devez posséder un certicat valide de votre destinataire.
77
• Source
• http://www.linux-france.org/prj/edu/archinet/
systeme/ch24s04.html
78
TP sur le serveur WEB sécurisé
Etape 1 : La création des certificats
• Etape 1 : La création des certificats
• Connectez-vous sous root et allez dans le
répertoire de configuration de votre serveur
Apache2 /etc/apache2 (on peut évidemment
choisir un autre répertoire) et créez un
répertoire appelé ssl. Vous vous placerez dans
ce répertoire afin que les clés et les certificats
soient créés à l'intérieur avant d'effectuer les
manipulations.
79
• Etape 1 : La création des certificats
• Connectez-vous sous root et allez dans le
répertoire de configuration de votre serveur
Apache2 /etc/apache2 (on peut évidemment
choisir un autre répertoire) et créez un
répertoire appelé ssl. Vous vous placerez dans
ce répertoire afin que les clés et les certificats
soient créés à l'intérieur avant d'effectuer les
manipulations.
80
• Création du certificat serveur
• Génération de la clé privée
• On génère la clef privée avec la commande suivante en
définissant un nom de fichier :
• openssl genrsa 1024 > servwiki.keyLa sortie attendue est la
suivante :
• Generating RSA private key, 1024 bit long modulus ..................
++++++ .................................................................++++++ e is
65537 (0x10001)Si vous souhaitez que cette clé ait un mot de
passe (qui vous sera demandé à chaque démarrage d'apache,
donc à éviter !), ajoutez "-des3" après "genrsa".
81
• Ceci a pour effet de créer une clé SSL (fichier servwiki.key), ne la perdez pas... c'est votre
clé privée... (ni éventuellement le mot de passe) !
• Vous pouvez observer son contenu : less servwiki.key
• -----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDQG9wvnuLC4aqzaJCAWGA1AxFzg00hjPObhq1mukzsGyuuWBFG
vj/k9vFNYX55DHctb/4cXtsZRWWvgcjtYnCVwRu+DAjFsk//kOMfhplmiv9xQ+ZL
8w/Xrnm8JWdSS+S4LCMnsuIiQtLbhMrQnUV02hAtbIZiSM3k6OjShEZhDQIDAQAB
AoGAHi0cBW+1k+qjFPbBlUq7UJSMUEKmyYmlvVSPCklTZB0gfVxZzPdDTpEcNks/
yo+rLFSD9Vsvy/9LGmLoXruadWlK67PCUnpM5/oRRGgy8t73YKrxflAU5Gtymjvc
ZCf0CAs6wBft3yLU31Qc4WqVM2vTyUH76jebVhxEw8k63OUCQQD/1OmAXV+TxBPG
ZTPFbzUeAE5rQqqOW4aoMNvM61Yn/19h6SzY2MfSQvF1BNns/efCRrqOMeyvPWUG
g1okfogTAkEA0D7pDf/D2Yu5msbOAGF4QBU1erLzpi/s6Rv6VEPYCGnHQlo3jbg9
FZbjHJ4UcYyYaA8jIrkY+FIJM88YlGbWXwJBAILEdvJ5R/CFCkKf2j2yIWmLaIol
En8fw43XI5L0PB7Hxx6KDLVu4XzVYQyahTZBdqR0eMlUNZJBhJE2tO3wi2cCQQCp
JkCFd3es0BrNxqfzlThozRFofcz88za7TldydL0YcFtC4Sb4vWsYizwktZ6jcPEm
rQz8Gl9W7MO+ynwLptB/AkEA1tsnFXoYzI71enmTdugGxbv0RqAd5iQpDYQkDSdn
2LImp/3YnXNJ9qpY91j87tKthh/Oetu6SHlmLg1LOYNIdw== -----END RSA PRIVATE KEY-----
82
• Protégez votre fichier en faisant : chmod 400 servwiki.key
• De multiples autres options sont possibles mais il est inutile d'alourdir le sujet (à creuser
pour une éventuelle PTI...)
• A partir de votre clé, vous allez maintenant créer un fichier de demande de signature de
certificat (CSR Certificate Signing Request).
• On génère la demande de certificat avec la commande suivante :
• openssl req -new -key servwiki.key > servwiki.csrLe système va vous demander de saisir
des champs ; remplissez-les en adaptant sauf le champ "Common Name" qui doit être
identique au nom d'hôte de votre serveur virtuel :
• Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-
State]:CORSE Locality Name (eg, city) []:Ajaccio Organization Name (eg, company)
[Internet Widgits Pty Ltd]:LLB Organizational Unit Name (eg, section) []:BTSINFO Common
Name (eg, YOUR name) []:wiki.domain1.org Email Address []: Ce n'est pas la peine de
saisir d'autres "extra attributes"...
• Ceci a pour effet de créer le formulaire de demande de certificat (fichier servwiki.csr) à
partir de notre clé privée préalablement créée.
83
• Ce fichier contient la clé publique à certifier. Un less servwiki.csr nous donne :
• -----BEGIN CERTIFICATE REQUEST-----
MIIBsTCCARoCAQAwcTELMAkGA1UEBhMCRlIxFTATBgNVBAgTDENvcnNlIGR1IFN1
ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExCMREwDwYDVQQLEwhCVFMg
SU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZvLmZyMIGfMA0GCSqGSIb3DQEBAQUA
A4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12kSbN/NWP0QUiPlksOkF2NkPfwW/m
f55dD1hSndlOM/5kLbSBo5ieE3TgikF0IktjBWm5xSqewM5QDYzXFt031DrPX63F
vo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLWwc0BzEgFZGGw7wiMF6wt5QIDAQAB
oAAwDQYJKoZIhvcNAQEEBQADgYEAwwI4UvkfhBvyRrUXtjrLfZXLxZlF9o+URmHJ
ysvrLKfesVBEzdA9mqk1OwIwLfe8Fw2fhip2LGqvcCPxDMoIE/0cDkqGRg9iKp7D
DMuy69lPTEB6UtpVKO/1eage0oug6VqdfGAYMMSGyWFuO9FE4UE6HspVodb20wGV
4H8qZuk= -----END CERTIFICATE REQUEST-----Maintenant, deux choix s'offrent à vous :
• envoyer le fichier servwiki.csr à un organisme (le tiers de confiance ou l'autorité de
certification (CA)) et ainsi obtenir le certificat dûment signé par la clé privée de l'organisme
(après avoir payé),
• ou bien signer vous-même le certificat.
• Ce dernier choix a notre préférence...
84
• Création du certificat de l'autorité de certification
• Pour signer un certificat, vous devez devenir votre propre autorité de certification, cela
implique donc de réaliser une clé et un certificat auto-signé.
• La création de la clé privée de l'autorité de certification se fait comme précédemment :
• openssl genrsa -des3 1024 > ca.keyCe qui a pour effet de créer la clé privée de l'autorité de
certification. Dans ce cas, il vaut mieux rajouter l'option -des3 qui introduit l'usage d'une
"passphrase" (mot de passe long qui peut même contenir du blanc) car c'est cette clé
privée qui signera tous les certificats que l'on emettra ; cette "passphrase" sera donc
demandée à chaque utilisation de la clé.
• Ensuite, à partir de la clé privée, on crée un certificat x509 pour une durée de validité d'un
an auto-signé :
• openssl req -new -x509 -days 365 -key ca.key > ca.crtIl faut saisir la passphrase... puisqu'on
utilise "ca.key" que l'on a protégé. Et on donne les renseignements concernant cette fois-ci
l'autorité de certification (c'est à dire nous-même).
• Attention : le nom de "Common Name" doit être différent de celui qui a été donné pour la
clé.
85
• Country Name (2 letter code) [AU]:FR State or
Province Name (full name) [Some-
State]:CORSE Locality Name (eg, city) []:Ajaccio
Organization Name (eg, company) [Internet
Widgits Pty Ltd]:LLB Organizational Unit Name
(eg, section) []:BTSINFO Common Name (eg,
YOUR name) []:cert_CA Email Address []:C'est
notre certificat d'autorité de certification qui
va permettre de signer les certificats créés.
86
• La signature du certificat serveur par le CA (Certificate Autority)
• La commande qui signe la demande de certificat est la suivante :
• openssl x509 -req -in servwiki.csr -out servwiki.crt -CA ca.crt -CAkey ca.key\ -CAcreateserial -CAserial ca.srlL'option
CAcreateserial n'est nécessaire que la première fois.
• Il faut saisir la passphrase...
• Le certificat signé est le fichier "servwiki.crt". La sortie de la commande attendue est la suivante :
• Signature ok subject=/C=FR/ST=CORSE/L=Ajaccio/O=LLB/OU=BTSINFO/CN=wiki.domain1.org Getting CA Private Key Enter pass
phrase for ca.key:Vous avez maintenant un certificat pour votre serveur se nommant servwiki.crt.
• less servwiki.crt-----BEGIN CERTIFICATE----- MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV
BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC
MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy
MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx
FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE
ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv
LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12
kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj
BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW
wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf
pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3
kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP 9t/rrbdGzXXOCl3up99naL5XAzCIp6r5
-----END CERTIFICATE-----Il faut maintenant installer le certificat de l'autorité de certification dans chaque navigateur client.
C'est ce dernier qui va valider le certificat reçu par le client lors de la requête https://.
87
• Installation du certificat d'autorité de certification
• Pour installer sur votre navigateur le certificat de l'autorité de certification, fichier ca.crt :
• "Arrangez-vous" pour avoir le certificat disponible à partir du client (disquette, clé usb, ftp,
ssh, répertoire partagé...)
• Sous Windows, un clic droit ou double-clic sur le fichier devrait vous permettre de lancer
l'assistant d'installation du certificat dans Internet Explorer. Vous devez l'installer en tant
qu'autorité de certification. Vérifiez ensuite que le certificat s'y trouve bien sous le nom
de "cert_CA".
• sur Mozilla :
• Edition/préférence/Confidentialité et Sécurité/Certificats
• Bouton de commande : gestion des certificats
• Onglet : autorité
• Bouton de commande : importer
• etc...
• Il ne reste plus maintenant qu'à configurer apache2.
88
• Source
• http://www.linux-france.org/prj/edu/archinet/
systeme/ch24s04.html
89
90