OpenSSL
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 sappuyant 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 dempreintes (MD5, SHA, RIPEMD160, ...)
+ le chiffrement et d chiffrement (RSA, DES, IDEA, RC2, RC4, Blowfish, ...)
+ 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.
Installation sous Ubunto
Apt-get install openssl
R pertoire de travail
/etc/ssl
Chiffrement asym trique avec OpenSSL (RSA)
G n ration des cl s
On peut g n rer une paire de cl s RSA avec la commande :
$openssl genrsa out <fichier> <taille en bit>
Par exemple :
$openssl genrsa out macle.pem 1024
Le fichier obtenu est un fichier au format PEM (Privacy Enhanced Mail, format en base 64), dont voici un exemple :
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDA6nzyERl8yUQBur0/GyF5fc/fllnHiZZytY/peu/6HPMJvji0
3dOqDK27mb9GtSqr7S9G4ClX/VKKekMJtcN6n2YNBp0OydyOYaZadrI/SaqDjrqB
HtZ4//H6BKs24kC2kJHABG+CZpM1U6pIHwX6rBjuxi4VZuOPvz1nrJfhWQIDAQAB
AoGAQYNgSxRjg20WG0A/ZF7iT0/aeCOm+YxP+0SNSszlEhsirfxbZZCvgOAtX7gm
Publicité
rOx5QUma9IbLg4YTsdMzUOjZKQRU7Al5AHGl2Xt5Qit/dCNkq5MMEra3rfKq5tpQ
+20NUA8xya1wAEUkwgIv6+aehyNsPk/Jpdi+tLWRWrsc+MECQQDlY1uER+gdYqAY
i3PRBVHnvlmdrPJAfoACyeyyOGaZnUe7UlLOQJ8jU46+sLYvKd9sIAo4QoWuJQLi
ibla8SlXAkEA10vv6s89X0qBImzTc8grXw+C7ab7PHPkoB1EqH08494szX8vwEk7
W9opiekHR4br7dn0PlK+QZ4wPZ8QoxeszwJBAKcGudSQJ0t+TOSSZjqEjScZS1es
Xpjng36EWX1L5ClmhJy5TOIx2651YTMoqP+elbi9e7OLfJtZB8i8T+MQRvECQQCO
PgKFzWQL6CqHNwVBUres94+WOiN1HlCnpI6vDwdCuZA6ONSwovGPzwRwtD/19uM7
YyumXX6L1dqja8tPJZ4rAkEAgjplY0rEkgFaszTIy7giULTaJwpGMhomepkvYnM4
iL8JB2iy8PgYM4a54ykB1DFV00SajnG1VrpOGXI/RguYRw==
-----END RSA PRIVATE KEY-----
Visualisation des cl s RSA
La commande RSA permet de visualiser le contenu dun fichier au format PEM contenant une paire de clefs RSA :
$openssl o
- Loption text demande laffichage d cod de la paire de la paire de clefs.
- Loption noout supprime la sortie normalement produite par la commande rsa.
Il nest pas prudent de laisser une paire de clef en clair, surtout lacc s physique et distant la machine par une autre personne, risque de causer beaucoup de d g ts. Pour cela, openssl offre la possibilit de chiffrer la paire des cl s avec la commande :
$openssl rsa in macle.pem des3 out macle.pem
Une passephrase est demand e deux fois pour g n rer une cl sym trique prot geant lacc s la cl .
Extraction de la partie publique
La partie publique dune paire de cl devra tre communiqu e nimporte qui. Le fichier
macle.pem contient la partie priv e, et ne peut donc pas tre communiqu e tel quelle.
Lextraction de la partie publique est donn e par la commande :
$openssl rsa in macle.pem pubout out macle\_publique.pem
Chiffrement et d chiffrement de donn es avec RSA
On peut chiffrer /d chiffrer les donn es avec les cl s RSA :
$openssl rsautl -encrypt in fichier.txt -inkey tacle\_publique.pem pubin out fichier\_chiffre.txt
$openssl rsautl -decrypt in fichie\_chiffre.txt -inkey macle.pem out fichier\_clair.txt
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).
Publicité
La signature num rique
Principe
Pierre cr e un document, et il calcule une emprunte (via les algorithmes MD5 ou SHA) partir de ce document. Il utilise ensuite sa cl priv e pour chiffrer cette donn e. Il associe le r sultat au document.
Chacun peut recalculer la somme de contr le du document et v rifier avec la cl publique de Pierre que le document est authentique et que Pierre est lauteur.
Exemple
Signer un document cest crypter avec sa cl priv e lempreinte dun fichier.
$openssl dgst -md5 fichier.txt > fichier.emp
$openssl rsautl -sign in fichier.emp -inkey cle.pem out fichier.sig
La v rification dune signature consiste d chiffrer la signature avec la cl publique. Ensuite on recalcule lempreinte pour v rifier que le document na pas t modifi .
$openssl rsautl -verify in fichier.sig -inkey pub.pem pubin
$openssl md5 fichier.txt
On peut signer et v rifier un document directement
$openssl dgst -md5 sign cle.pem out fichier.sig fichier.txt
$openssl dgst -md5 verify pub.pem -signature fichier.sig fichier.txt
Les certificats X509
La notion de certificat
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 les cl s priv s dorganismes reconnus, des autorit s ou CA (Certification Authorities). Un certificat permet de dialoguer de mani re s re (chiffr e) avec la personne ou la soci t quil d crit. Si lon poss de dautres certificats d crivant les signataires, on a lassurance de lidentit du propri taire de la cl .
Les certificats X509
LISO a tabli un protocole, baptis X509, permettant lauthentification sur un r seau. Ce protocole utilise des certificats au format normalis .
Les certificats X509 ont t utilis s au d but pour la s curisation du courrier lectronique : PEM (Privacy Enhanced Mail), lanc tre de S/MIME, maintenant ils sont utilis s aussi bien dans la s curisation du web (via SSL) que dans bien dautres domaines.
Format dun certificat X509
Les diff rents champs
- Version la version du protocole
- Serial Number un num ro de s rie unique pour un CA
- Algorithme Identifier lalgorithme utilis pour la signature
+ Algorithm
+ Parameters
- Issuer la CA qui a mis le certificat
- Period of validity la p riode de validit
+ Not before date d but
+ Not after date fin
Publicité
- Subject la personne identifi e par le certificat
- Subjects public key la cl publique
+ Algorithm
+ parameters
+ public key
- signature la signature
Les formats des fichiers
Un certificat est stock dans un fichier. Les formats les plus souvent utilis s sont les suivants :
DER : le format DER, de lOSI, est le format binaire qui traduit lASN.1.
PEM : cest un format ascii, cod Base 64. Le texte est encadr dune ligne BEGIN CERTIFICATE et END CERTIFICATE
PKCS 7 : le standard RSA
PKCS12 : ce standard RSA est principalement utilis pour les certificats des utilisateurs. Un fichier PKCS12 contient non seulement le certificat dun utilisateur mais aussi sa cl priv e normalement prot g e par un mot de passe.
Description dun sujet ou dun CA
Ce sont les possesseurs de la cl publique.
- C (Country) : pays
- S(State) ou P (Province): tat ou province
- L (Locality) : ville
- (Organization) : soci t
- OU (Organization Unit) : le service
- CN (Common Name) : le nom du sujet ou ladresse DNS du serveur
- E (Email) : adresse e-mail
Gestion des certificats avec openssl
Cr er une requ te de certificat
$openssl genrsa -out cle.pem 1024
$openssl req -new key cle.pem -out req.cer
$openssl req -in req.cer -text
Visualiser un certificat
$more certif.pem
$openssl x509 -in certif.pem -text -noout
Cr ation dun certificat racine
$openssl x509 -req -in req.cer -signkey cle.pem -out cer.cer
Jouer le r le dun CA : signer un certificat
- Copier le fichier de configuration
$ cp /usr/local/openssl.conf
- Cr er larborescence daccueil
Publicité
$ mkdir demoCA
$ mkdir demoCA/newcerts
$ echo 01 > demoCA/serial
$ touch demoCA/index.html
$ mkdir demoCA/private
$ mv cle.pem demoCA/private/cakey.pem
$ mv cer.cer demoCA/cacert.pem
- Signer une requ te de certificat
$ openssl ca -config openssl.cnf -in person.req -out person.cer
Cr er un certificat pour une personne
$ openssl genrsa -out pers.key 1024
$ openssl req -new -key pers.key -out pers.req
$ openssl x509 -req -days 365 -CAcreateserial -CA cer.cer -CAkey cle.pem \
> -in pers.req -out req.cer
$ openssl pkcs12 -export -in pers.cer -inkey pers.key -out pers.pfx
$ openssl pkcs12 -in pers.pfx -out pers.pem
$ more pers.pem
Signature de fichiers
Suite la complexit des algorithmes de cryptographie asym trique, on signe toujours de petits documents. Pour signer un grand document, on calcule dabord une empreinte de ce document. La commande dgst (digest) permet de le faire.
$openssl dgst <hachage> -out resultat\_hachage fichier.txt
Signer un document revient signer son empreinte. Pour cela, on utilise loption sign de la
commande rsautl :
$openssl rsautl sign in resultat\_hachage inkey <cl > -out signature
Et pour v rifier la signature:
$openssl rsautl verify in signature -out resultat\_hachage1 pubin inkey macle\_publique