Certificats - IUT de Nice

Transcription

Certificats - IUT de Nice
Concepteur original : P. Mathieu
Applications de cryptographie: GPG + Certificats
I. GPG
Créer une biclé GPG (couple clé publique/privée) en choisissant l'option par
défaut de taille 1024 bits et en prenant un type par défaut (RSA/RSA) :
gpg –-gen-key
Lister votre trousseau de clef (il ne doit y avoir que la votre!):
gpg –-list-keys
Pour pouvoir exporter votre clef (par exemple dans un dépôt public ou par
mail) utilisez la commande :
gpg --armor --output pubkey.txt --export 'Your Name'
Faites un « more » sur le fichier pubkey.txt et sur le fichier dans lequel se
trouve votre clef publique dans le répertoire ~/.gnupg (quel est ce
fichier?). Quel est l'intérêt de l'exportation ?
Signez un GROS fichier toto.fic que vous fabriquez vous-mêmes en mettant
du contenu dedans (par exemple faites un cat /etc/shadow >> toto.fic plein
de fois)
gpg –-sign toto.fic
Quel fichier a été généré?
Vérifier la signature du fichier.
gpg –-verify toto.fic.gpg
Quelles clefs ont été utilisées pour les deux étapes (signature et vérification) ?
Créer une signature détachée et vérifier la signature de la même façon. Quel
est l'avantage (regarder la taille de la signature attachée et détachée) ?
Vous pouvez aussi crypter avec votre clef :
gpg –-encrypt -r 'Votre Nom' toto.fic
Decrypter. Quelles clefs ont été utilisées ?
Vous pouvez aussi crypter le fichier pour votre un autre utilisateur dont vous
avez la clef.
Commencez par aller se faire des amis sur http://keyserver.pgp.com/ . Par
exemple, cherchez John.
Télécharger la clef de votre nouvel ami John (le premier de la liste par
exemple) et importez la:
gpg --import key.asc
Lister votre trousseau.
Crypter pour John
Décrypter.
II. Faire des Certificats
Nous allons d'abord créer une autorité de certification, puis générer des certificats.
1. Faire un certificat rapidement
a) Certificat auto-certifié
On le fait en une commande
/usr/lib/ssl/misc/CA.sh -newcert
Visualisation du certificat
openssl x509 -in newcert.pem -text
Un certificat est fait par quelqu'un (qui le signe) et pour quelqu'un. Quels
champs correspondent au "par" et au "pour" ?
Pourquoi est-ce que ce certificat est dit auto-certifié? Quels champs
l'indiquent dans l'en tête?
Quelle est la clef publique qui a été signée? A quel symbole introduit dans le
cours correspond le « modulus »?
Avec quelle clef a été signé le résumé du certificat? Avec quel algorithme
openssl a-t-il créée le résumé?
Lire le second fichier généré :
openssl rsa -in newkey.pem -text
Que contient-il?
Avec quel algorithme a-t-il chiffré (lire directement newkey.pem)
b) Test du certificat avec un serveur Web
Une manière de tester votre nouveau certificat est de démarrer un serveur
Web qui l'utilise pour s'authentifier. On peut le faire avec un serveur
Apache, mais openssl nous permet de le faire en faisant un pseudo serveur
Web :
Page 2 / 6
Applications de cryptographie
openssl s_server -cert newcert.pem -key newkey.pem -accept
443 -www
Le serveur doit écouter sur le port 443. Avec quelle commande vérifiez-vous
qu'il est actif. Sur quelle(s) interface(s) de la machine virtuelle accepte-t-il
les connexions?
Connectez-vous sur le site avec Firefox depuis la machine physique en https.
Quel est le comportement de firefox à la connexion ? Expliquez pourquoi.
2. Maîtrise des paramètres
a) L'autorité de certification
Attention de bien mémoriser le mot de passe de la CA. Répondre par la touche
return (⏎) à la première question car vous n'avez pas de certificat de CA à
présenter. Ensuite, remplissez normalement : il faut absolument remplir le
champ Canonical name.
/usr/lib/ssl/misc/CA.pl -newca
b) Demande de certificat
/usr/lib/ssl/misc/CA.pl -newreq
Name)
(pareil, il faut le champ Canonical
c) Signature du certificat
Attention de bien mémoriser le mot de passe de la CA
/usr/lib/ssl/misc/CA.pl -sign
Lisez le certificat obtenu avec openssl et prouvez qu'il n'est pas auto-signé.
Vérification du certificat
/usr/lib/ssl/misc/CA.pl -verify newreq.pem
Quelle opération est faite?
3. Extraits du certificat
Visualisation de certains champs
Page 3 / 6
openssl x509 -in newcert.pem -subject -issuer -pubkey
Chargement de format
openssl x509 -in newcert.pem -inform PEM -out newcert.cer
-outform DER
Cherchez sur Internet pour expliquer la différence entre PEM et DER.
III. Vérifier des certificats avec openssl
Récupérez sur le site Web
http://iutsa.unice.fr/~urvoy/ext/Cours/M3104/https_google.dmp
du cours M3104 le fichier https_google.dmp qui est un début d'échange ssl avec Yahoo.
SSL sert notamment ici à identifier le serveur. Cela se passe comme suit. Le serveur envoie
un certificat qui contient, entre autres information, son nom, sa clef publique et un résumé
chiffré des informations à la fin du certificat. Ce résumé est chiffré par une autorité de
certification.
On va ici faire « à la main » ce que fait openssl quand il reçoit le certificat, c'est à dire
vérifier que le certificat est valide par vérification du résumé chiffré. Cela suppose
qu'openssl connaisse la clef publique de l'autorité de certification. Les systèmes
d'exploitation et les navigateurs viennent avec un ensemble de clefs publiques.
Voici un exemple de certificat avec les parties qui nous intéressent :
Page 4 / 6
Applications de cryptographie
1. Extraction du certificat
Ouvrez le fichier avec wireshark
Cherchez dans les paquets SSL non chiffrés du début de l'échange, la partie certificate.
Sélectionnez le certificat puis sauvegardez le dans un fichier google.der
2. Lecture du certificat
Le certificat est dans un format particulier. Nous allons le changer de format avant de
pouvoir le lire avec openssl. Pour ce faire, appliquez la commande suivante en remplaçant
mycert par yahoo
On peut maintenant lire le certificat avec openssl en effectuant la commande :
openssl x509 -in yahoo.pem -text
Page 5 / 6
3. Vérification du certificat
Pour faire la vérification du certificat, il faut télécharger la clef publique de l'autorité de
certification. Trouvez son nom et télécharger le certificat (auto-signé par l'autorité avec sa
clef publique) depuis le site Google internet authority : prenez l'ancien certificat geotrust...
Placez le certificat dans un répertoire Certs que vous aurez créé préalablement.
Pour des raisons techniques openssl travaille avec des liens logiques vers les certificats et
non les certificats directement. Pour ce faire, convertissez le certificat du mode DER en
PEM comme précédemment. Appliquez ensuite la commande :
c_rehash Certs/nom_du_certi_en_pem
qui va faire le travail.
Vérifiez que :
1. Si on ne spécifie pas ce répertoire, openssl n'arrive pas vérifier le certificat en
appliquant la commande : openssl verify google.pem
2. Si on spécifie le répertoire, openssl arrive à vérifier le certificat, en appliquant la
commande : openssl verify -Cafile ./Certs google.pem
Page 6 / 6
Applications de cryptographie