Open SSL
Open SSL
Open SSL
OpenSSL
Le p
protocole SSL ((Secure Socket Layer)
y ) a été développé
pp ppar la
société Netscape Communications Corporation pour permettre aux
applications client/serveur de communiquer de façon sécurisée.
OpenSSL
p est un utilitaire cryptographique
yp g p q q qui implémente
p les
- Une phase de poignée de mains (handshake) durant laquelle le protocoles SSL et TLS ainsi que les standards cryptographiques liés
client et le serveur s’identifient, conviennent du système de dont ils ont besoin.
chiffrement et d’une clés qqu’ils utiliseront p
par la suite.
OpenSSL
p Utilisation de openSSL
p
Chiff
Chiffrement symétrique
é i $ openssl enc [options] [arguments]
$ man enc
Chiffrement symétrique
y q Chiffrement symétrique
y q
Chiffrement symétrique
y q Chiffrement symétrique
y q
Chiffrement symétrique
y q Chiffrement symétrique
y q
Vérification:
$ diff test.txt test.bf
Ateliers Ateliers
At1: At1:
At1
4.c. Chiffrer le fichier de essai.txt en système triple DES en CBC
1.c. Chiffrer le fichier essai.txt en système Blowfish en CBC mode mode dans essai.des3.
dans essai.bf.
essai bf 4.d. Déchiffrer le fichier essai.des3.
1.d. Déchiffrer le fichier essai.bf
2.c.
2 c Chiffrer le fichier de essai.txt
essai txt en système DES en CBC mode 5.c. Chiffrer le fichier de essai.txt en système
y AES 192 bits en
dans essai.des. CBC mode dans essai.aes192.
2.d. Déchiffrer le fichier essai.des. 5.d. Déchiffrer le fichier essai.aes192.
Génération d’une p
paire de clés
Exemple:
Il n’est pas prudent de laisser une paire de clés en clair.
$ openssl rsa -in mesCles.pem -text -noout
Avec la commande rsa, il est possible de chiffrer une paire de clés.
Trois systèmes de chiffrement sont possible: des, des3 et idea.
Les différents éléments de la clé sont affichés en hexadécimal
((hormis l’exposant
p p
publique).
q ) On p peut distinguer:
g $ openssl rsa -in
in mesCles.pem
mesCles pem -des3
des3 -out
out mesCles.pem
mesCles pem
- le modulo.
- l’exposant public. Une phrase de passe est demandée pour générer une clé
- l’exposant
l’ privé.
i é symétrique.
ét i
- les nombres premiers facteurs du modulus.
- trois autres nombres d’optimisation
d optimisation de l’algorithme.
l algorithme. Q: Voir maintenant le fichier mesCles.pem
p
Q: Déterminer ces informations dans votre fichier de clés.
Le chiffrement
L hiff d
de d
données
é avec RSA se ffait
i avec lla commande
d
Le fichier mesCles.pem contient la partie publique et la partie privée rsautl:
d’une ppaire de clés RSA et ne p
peut donc être communiquéq tel q quel
même s’il est chiffré. $ openssl rsautl -encrypt -in <fichier-in> -inkey <cle> -out <fichier-
Avec –pubout on peut exporter la partie publique d’une clé: out> -pubin
$ openssl rsa -in mesCles.pem -pubout -out maclepub.pem -pubin est utilisée si le fichier de la clé ne contient que la partie
publique.
Q: Voir maintenant le fichier maclepub.pem
Exemple:
Pour déchiffrer,, on remplace
p l’option
p yp p
–encrypt par –decrypt
yp .
$ openssl rsautl -encrypt -in essai.txt -inkey SaClepub.pem
-out essai.chi -pubin Le fichier contenant la clé doit obligatoirement contenir la clé privé.
où hachage est une fonction de hachage tel que: Il reste ensuite à vérifier que l’empreinte ainsi produite est la même
que celle que l’on peut calculer.
MD5 : sur 128 bits.
SHA1 : sur 160 bits.
RIPEMD160 : sur 160 bits.
# cd /usr/local/ssl
# cp /dev/null index.txt
le fichier index.txt contiendra la « base de données » de l'autorité de
certification gérée par OpenSSL;
De la même façon que précédemment: Comme dans le paragraphe précédent et toujours dans /usr/local/ssl/cnf:
#cd /etc/ssl/cnf
#touch req-server-cert.cnf
req server cert cnf #touch req-user-cert.cnf
req user cert cnf
L'éditer afin de lui intégrer le texte de l'annexe 4.
L'éditer afin de lui intégrer le texte de l'annexe 2.
Ce fichier servira à la création du certificat du serveur (web par exemple). #touch ca-user-cert.cnf
Puis: L'éditer afin de lui intégrer le texte de l'annexe 5.
#touch caca-server-cert.cnf
server cert.cnf
Ce fichier permettra la signature du certificat par l'autorité de certification
(Root CA). L'éditer afin de lui intégrer le texte de l'annexe 3.
1. C
1 Certificat
tifi t Root
R t CA Le mot de passe qui a été choisi est: rootca
# openssl genrsa -des3 -out ca/ca.key -rand private/.rand 4096
a) Génération d'une paire de clés 16384 semi-random bytes loaded
Generating g RSA private
p key,y, 4096 bit long g modulus
Tout d'abord, il faut générer la paire de clés privée / publique RSA avec la ..................................................................
commande genrsa. ................+
..................................................................
.....................++
++
e is 65537 (0x10001)
Enter pass phrase for ca/ca.key: Root CA
y g - Enter p
Verifying pass phrase
p for ca/ca.key: y Root CA
Le paramètre -des3 indique que la paire de clés sera chiffrée avec l'algorithme
DES3. Le paramètre -out précise le nom du fichier de la paire de clés. Le paramètre
- rand p
pointe sur un fichier aléatoire. Le dernier p
paramètre doit être la longueur
g de la
paire de clés en nombre de bits.
Il est conseillé de mettre les droits de « ca.key » à 400 n'autorisant ainsi que la lecture de cette paire de
clés,, et uniquement
q p
par l'administrateur root.
#mkdir serverssl
#
#openssl l genrsa -des3 d 3 -outt serverssl/serverssl.key
l/ lk -rand
d
private/.rand 1024
16384 semi-random bytes loaded
G
Generating ti RSA private i t key, k 1024 bit llong modulus
d l
Cela se p
passe maintenant en 2 temps.
p Tout d'abord,, il y
...........................................++++++ a génération d'une requête de certificat puis la
.......++++++ signature peut s'effectuer.
e is 65537 (0x10001)
Enter pass phrase for serverssl/serverssl.key:Serveur SSL
Verifying - Enter pass phrase for ../serverssl/serverssl.key:Serveur SSL
Ensuite
#chmod 400 y
serverssl/serverssl.key
Certificat serveur
#openssl req -new -config cnf/req-server-cert.cnf -key
serverssl/serverssl.key -out serverssl/serverssl.csr
E t pass phrase
Enter h for
f ../serverssl/serverssl.key:Serveur
/ l/ lk S SSL
You are about to be asked to enter information that will be incorporated
into your certificate request.
What yyou are about to enter is what is called a Distinguished
g 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.--
---
A- Génération d’une requête
q de certificat serveur Country Name * (2 letter code) [MA]:
On effectue une requête de certificat serveur avec la commande req: State or Province Name (full name) [Province]:Tensift
Locality Name (eg, city) [City]:Marralech
Organization Name * (eg, company) [Company]:UCAM
Organizational Unit Name (eg, section) [Section]:FSSM
Common Name * (eg, www.ucam.ac.ma) []:common-name
E-mail Address []:[email protected]
Certificat utilisateur
#openssl genrsa -des3 -out private/kiram.key -rand private/.rand
1024
16384 semi-random bytes loaded
a) Génération d'une paire de clés privée / publique Generating RSA private key, 1024 bit long modulus
.++++++
++++++
De la même façon que pour le serveur ou l'autorité de certification, il est .............................................++++++
nécessaire de générer la paire de clés. Pour cela: e is 65537 (0x10001)
Enter pass phrase for ../private/kiram.key:kiram
Verifying - Enter pass phrase for private/kiram.key:kiram
Lorsque la paire de clés et le certificat sont générés par la PKI, il est très La commande ci-dessous fait la conversion du certificat au format p12 :
pratique de retourner toutes ces données à l'utilisateur au moyen du format #openssl pkcs12 -export -descert -inkey private/kiram.key -in
PKCS#12, car ce dernier est reconnu par de très nombreux clients web et certs/kiram.crt -name "ahmed_friendlyname" -certfile
de messagerie. ca/ca.crt -caname "rootca_friendly_name" -out certs/kiram.p12
Enter ppass p
phrase for p
private/ahmed.key:kiram
y
Enter Export Password:kiramexport
Verifying - Enter Export Password:kiramexport
Simulation Simulation
#openssl s_server -accept 4433 -no_ssl2 -no_dhe -cert #openssl s_client -connect 127.0.0.1:4433 -msg -cert
serverssl/serverssl.crt -key serverssl/serverssl.key certs/ahmed.crt -key private/ahmed.key
-CAfile ca/ca.crt -msg -WWW -Verify 1 Enter PEM pass phrase:kiram
verify depth is 1, must return a certificate
Enter PEM pass phrase:Serveur SSL