TP
Créat i on de clés de chi ffre me nt et de certificats avec openSSLSignature
de documents et sécurisation de sites web
1. Brève introduction sur openssl
openSSL est une boite à outils cryptographiques implémentant les protocoles SSL et
TLS avec une bibliothèque de programmation en C qui réalise des applications client/serveur
sécurisées à l’aide de la commande openssl ; cette commande permet de créer des clés de
chiffrement comme RSA, des certificats (X509), des empreintes MD5, SHA, etc. openssl
permet le chiffrement et déchiffrement (DES, IDEA, RC4, etc.). Pour plus de détails, vous êtes
invités à visiter le site [Link]
Plan du TP : On utilisera openssl pour réaliser les tests suivants :
• Chiffrement et déchiffrement d’un fichier donné.
• Génération de clés de cryptage.
• Signature des documents avec des fonctions de hachage. Familiarisation avec ces
notions.
• Création de certificats.
• Sécurisation d’un site web avec le protocole https.
Ci-dessous, un guide et quelques questions pour vous aider à réaliser ce tp.
Tout d’abord, la commande man openssl permet de connaitre toutes les fonctionnalités de openssl.
Chiffrement RSA avec openSSL
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.
$ o p e n s s l g e n rs a −o ut <f i c h i e r > <t a i l l e >
1
Par exemple, pour générer une paire de clés de 1024 bits, stockée dans le fichier [Link], on
tape la commande
$ o p e n s s l g e n rs a −o ut maCle . pem 1 0 2 4
Le fichier obtenu est un fichier au format PEM (Privacy Enhanced Mail, format en base 64),
dont voici un exemple
$ c a t maCle . pem
−−−−−BEGIN RSA PRIVATE KEY−−−−−
MIICXAIBAAKBgQCveVjLltevTC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO
7AfKWpA5g0wFZgZNERIfFYaCnvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvP
d8LgBypJHbr6f5MXWqntvzp0Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQAB
AoGANchUrfnq28DWy0fE0R+cscvC292Z8jN8vrIBWxEk8iSlKU0om6v+a0g8wlP6
3 gC6V66uxjY7xxdf7SD+/UykVl4PGFymhLtywSdGlgec3tLgBtV3ytJFilAVDBij
LzQwUegCO4zt1JWYc6vvaVdNyQSaGIIeYGsNDWEYlOtDSlkCQQDVRn9JS15G8p+H
4Z0PbU9ZQg2L1u9/SD/kELVe3Kx1fdHulxH0v8V2AgPdXA29Nhi+TxUtC+V8CMc2
KXmAvFsHAkEA0qBDmjHMDPwcGaqbQ2lymYQIGlZ5TLQFA98Dey2uE+CB6pmS/ e /Z
i l u 1 I a a s u E 3 v B z Xf B /JU7DUkV++JQ7TtvQJBAL2s5dUch2sXqlOhjhpDP/eE7CE6
9WLAsbm2Nmd4YJRZYtQLXPfLeeSapC9BCCMHsnfGQ3H9i4mFEQ6VUi7w1Q8CQAQa
pVaS09QI8Y86eM4GdvowzWud9b0d4N8jcFDtIfA3NrDYjzmte8KraMsgEUuCET9F
uHPSL/9 uRagE/dq44s0CQCMQU4PMqkMtwzCFsV8ZqLmkDPn1binIAwRLYFcsQRDt
gTi6rycz3Pk1hCVzBfyMd8zwqpwKmR5FoOXuJEv+mVg=
−−−−−END RSA PRIVATE KEY−−−−−
Visualisation des clés RSA
La commande rsa permet de visualiser le contenu d’un fichier au format PEM contenant une
paire de cl´es RSA.
$ o p e n s s l r s a −in <f i c h i e r > −te xt −noo ut
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.
Par exemple
$ o p e n s s l r s a −in maCle . pem −te xt −no o ut
Priva te −Key : ( 1 0 2 4 b i t )
modulus :
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 :
3 1 : c c : 5 6 : e0 : 1 1 : f 3 : 4 0 : c 7 : 3 0 : b5 : 8 2 : a7 : 7 0 : 4 e : 5 5 :
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 :
4c :0 5 : 6 6 : 0 6 :4 d : 1 1 : 1 2 :1 f : 1 5 :8 6 :8 2 : 9 e : f6 :9 0 : 0 d :
0 0 : 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 :
2 0 : f a : 7 a : 0 d : 7 9 : b f : 4 5 : 6 6 : 2 6 : 6 b : c f : 7 7 : c2 : e0 : 0 7 :
2 a : 4 9 : 1 d : ba : fa : 7 f : 9 3 : 1 7 : 5 a : a9 : ed : b f : 3 a : 7 4 : 4 2 :
f 8 : 3 a : 7 5 : d7 : 8 d : a5 : 4 2 : 2 b : aa : 4 9 : 2 1 : e 2 : e 0 : d f : 1 c :
5 0 : d6 : ab : 2 a : e4 : 4 1 : 4 0 : a f : 2 b
p u b li c Expo ne nt : 6 5 5 3 7 ( 0 x1 0 0 0 1 )
priv a te Expo ne nt :
3 5 : c 8 : 5 4 : ad : f 9 : e a : db : c 0 : d6 : cb : 4 7 : c 4 : d1 : 1 f : 9 c :
2
b1 : cb : c 2 : db : dd : 9 9 : f 2 : 3 3 : 7 c : be : b2 : 0 1 : 5 b : 1 1 : 2 4 :
f 2 : 2 4 : a5 : 2 9 : 4 d : 2 8 : 9 b : ab : f e : 6 b : 4 8 : 3 c : c 2 : 5 3 : fa :
de : 0 0 : ba : 5 7 : a e : a e : c 6 : 3 6 : 3 b : c 7 : 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 : c 1 : 2 7 : 4 6 :
9 6 : 0 7 : 9 c : de : d2 : e0 : 0 6 : d5 : 7 7 : c a : d2 : 4 5 : 8 a : 5 0 : 1 5 :
0 c : 1 8 : a3 : 2 f : 3 4 : 3 0 : 5 1 : e 8 : 0 2 : 3 b : 8 c : ed : d4 : 9 5 : 9 8 :
7 3 : ab : e f : 6 9 : 5 7 : 4 d : c 9 : 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
prime 1 :
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 : e 4 : 1 0 : b5 : 5 e : dc :
a c : 7 5 : 7 d : d1 : e e : 9 7 : 1 1 : f 4 : bf : c 5 : 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 : c 7 : 3 6 : 2 9 :
7 9 : 8 0 : bc : 5 b : 0 7
prime 2 :
0 0 : d2 : a0 : 4 3 : 9 a : 3 1 : c c : 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 :
a e : 1 3 : e0 : 8 1 : ea : 9 9 : 9 2 : fd : e f : d9 : 8 a : 5 b : b5 : 2 1 : a6 :
a c : b8 : 4 d : e f : 0 7 : 3 5 : df : 0 7 : f 2 : 5 4 : e c : 3 5 : 2 4 : 5 7 : e f :
8 9 : 4 3 : b4 : ed : bd
e xpo ne nt 1 :
0 0 : bd : a c : e5 : d5 : 1 c : 8 7 : 6 b : 1 7 : aa : 5 3 : a1 : 8 e : 1 a : 4 3 :
3 f : f 7 : 8 4 : e c : 2 1 : 3 a : f 5 : 6 2 : c 0 : b1 : b9 : b6 : 3 6 : 6 7 : 7 8 :
6 0 : 9 4 : 5 9 : 6 2 : d4 : 0 b : 5 c : f 7 : cb : 7 9 : e 4 : 9 a : a4 : 2 f : 4 1 :
0 8 : 2 3 : 0 7 : b2 : 7 7 : c 6 : 4 3 : 7 1 : fd : 8 b : 8 9 : 8 5 : 1 1 : 0 e : 9 5 :
5 2 : 2 e : f 0 : d5 : 0 f
e xpo ne nt 2 :
0 4 : 1 a : a5 : 5 6 : 9 2 : d3 : d4 : 0 8 : f 1 : 8 f : 3 a : 7 8 : c e : 0 6 : 7 6 :
f a : 3 0 : cd : 6 b : 9 d : f 5 : bd : 1 d : e 0 : df : 2 3 : 7 0 : 5 0 : ed : 2 1 :
f 0 : 3 7 : 3 6 : b0 : d8 : 8 f : 3 9 : ad : 7 b : c 2 : ab : 6 8 : cb : 2 0 : 1 1 :
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 : e 2 : cd
coeffici ent :
2 3 : 1 0 : 5 3 : 8 3 : c c : aa : 4 3 : 2 d : c 3 : 3 0 : 8 5 : b1 : 5 f : 1 9 : a8 :
b9 : a4 : 0 c : f 9 : f 5 : 6 e : 2 9 : c 8 : 0 3 : 0 4 : 4 b : 6 0 : 5 7 : 2 c : 4 1 :
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 :
f c : 8 c : 7 7 : c c : f 0 : aa : 9 c : 0 a : 9 9 : 1 e : 4 5 : a0 : e 5 : e e : 2 4 :
4b : f e : 9 9 : 5 8
Les diff´erents ´el´ements de la cl´e sont affichés en hexad´ecimal. On peut distinguer le modulus,
l’exposant public (qui par d´efaut est toujours 655371 ), l’exposant priv´e, les nombres premiers
facteurs du modulus, plus trois autres nombres qui servent à optimiser l’algorithme de
d´echiffrement.
Chiffrement d’un fichier de clés RSA
Trois options sont possibles qui précisent l’algorithme de chiffrement symétrique à utiliser : -
des, -des3 et -idea.
$ o p e n s s l r s a −in maCle. pem −de s 3 −o ut maCle . pem
3
w r it in g RSA key
Ente r PEM pa s s p hra s e :
V e r i fy in g − Ente r PEM pa s s p hr a s e :
Une phrase de passe est demandée deux fois pour générer une clé symétrique protégeant l’accès à
la cl´e.
Exercice 1 : Avec la commande cat observez le contenu du fichier [Link].
Utilisez à nouveau la commande rsa pour visualiser le contenu de la clé.
Exportation de la partie publique
La partie publique d’une paire de clés RSA est publique. Le fichier [Link] contient la partie
privée de la clé. Avec l’option –pubout on peut exporter la partie publique de la clé.
$ o p e n s s l r s a −in maCle . pem −pubout −o ut ma Cle Pu bli q u e . pem
Exercice 2 :
Q 1 . Notez le contenu du fichier [Link]. Remarquez les marqueurs de d´ebut et de
fin.
Q 2 . Avec la commande rsa visualisez la cl´e publique. Vous devez préciser
l’option -pubin, puisque seule la partie publique figure dans le fichier [Link].
Chiffrement/déchiffrement de données avec RSA
On peut chiffrer des ´données avec une cl´e RSA. Pour cela on utilise la commande rsautl
où
– fichier entree est le fichier des données à chiffrer. Le fichier des données à chiffrer ne doit pas
avoir une taille excessive (ne doit pas d´epasser 116 octets pour une cl´e de 1024 bits).
– cle est le fichier contenant la cl´e RSA. Si ce fichier ne contient que la parte publique de la
cl´e, il faut rajouter l’option -pubin.
– fichier sortie est le fichier de donn´ees chiffr´e.
Pour d´echiffrer on remplace l’option -encrypt par -decrypt. Le fichier contenant la cl´e doit
obligatoirement contenir la partie privée.
Exercice 3 : Chiffrez le fichier de votre choix avec la clé publique. Visualiser son contenu avec
cat. Déchiffrer le avec la clé privée. Visualiser le fichier décrypté et comparer le avec l’origine.
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.
e e ee
où hachage est une fonction de hachage.
4
Signer un document revient à signer son empreinte. Pour cela, on utilise l’option -sign de la
commande rsautl
$ o p e n s s l r s a u t l −s ig n −in <e mp re inte > −inke y <c l e > −o ut <s i g n a tu re >
et pour v´erifier la signature
$ o p e n s s l r s a u t l −v e r i f y −in <s i g n a tu re > −pubin −inke y <c l e >
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´e utilis´ee pour la v´erification est la partie publique
de la cl´e utilis´ee pour la signature.
Exercice 4 : Signez le fichier de votre choix, puis vérifiez la signature.