4- Certificats

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 électoniques.

4.1 Génération de la paire de clés

Exercice 1. 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 fichier contenant votre paire de clés RSA. Ce fichier est protégé par le mot de passe fourni lors de la génération.


Exercice 2. Créez un fichier ne contenant que la partie publique de votre clé RSA (cf Exportation de la clé publique). Dans la suite, on suppose ce fichier nommé maClePublique.pem.


4.2 Création d’une requête de certificats

Maintenant que vous disposez d’une clé RSA, vous allez établir une requête pour obtenir un certificat.

Outre la clé publique du sujet, un certificat contient un certain nombre d’informations concernant l’identité de son propriétaire :

Toutes ces informations et d’autres encore sont demandées lors de la création de la requête. Un fichier de configuration peut-être défini qui propose les informations à apporter dans le certificat avec des valeurs par défaut.


On établit une requête avec la commande req de openssl.

$ openssl req -config req.cnf -new -key maCle.pem -out maRequete.pem

Le fichier produit maRequete.pem est aussi au format PEM.

$ cat maRequete.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIB/zCCAWgCAQAwgb4xCzAJBgNVBAYTAkZSMRIwEAYDVQQIEwlOb3JkICg1OSkx
GjAYBgNVBAcTEVZpbGxlbmV1dmUgZCdBc2NxMR4wHAYDVQQKExVVbml2ZXJzaXRl
IGRlIExpbGxlIDExGTAXBgNVBAsTEExpY2VuY2UgUHJvIERBMkkxGjAYBgNVBAMT
EUVyaWMgV2Vncnp5bm93c2tpMSgwJgYJKoZIhvcNAQkBFhlFcmljLldlZ3J6eW5v
d3NraUBsaWZsLmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCveVjLltev
TC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO7AfKWpA5g0wFZgZNERIfFYaC
nvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvPd8LgBypJHbr6f5MXWqntvzp0
Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQABoAAwDQYJKoZIhvcNAQEEBQAD
gYEAHOwGNN6A8d4EhjfXCRvC2fhIjt7i6jxfkHKBkHpm2yNBBDHQwiv+O/Y0MeNh
Ira+y8KUMjeImsSiH4731sfgA6ycm+6JoDV7n6z8tzN5QMGsw7V3ErduskayKP4T
ja+BMImEcDwlr+KuRO704rGeiAG7pvtDGcDcj2Mex68ki94=
-----END CERTIFICATE REQUEST-----


On peut consulter les informations contenues dans la requête avec la commande

$ openssl req -config req.cnf -in maRequete.pem -text -noout
Certificate Request:
Data: Version: 0 (0x0) Subject: C=FR, ST=Isère (38), L=Grenoble, O=Universite Grenoble Alpes, OU=Master NSI, CN=Frederic Prost/emailAddress=Frederic.Prost@univ-grenoble-alpes.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit):
     00:b4:f3:e0:65:50:12:f6:51:c2:96:90:77:5b:c3:
     25:46:17:1f:3b:0e:b9:a0:5a:fa:27:14:2c:49:96:
     88:68:9c:60:b1:8a:94:2c:22:76:f0:de:7e:02:1b:
     1d:1d:57:b6:b8:8d:55:7e:15:a4:5d:a1:ce:02:71:
     cd:56:30:dc:67:64:fb:cb:c7:bc:64:75:23:4c:2f:
     a5:06:47:a6:39:46:74:f1:8a:91:ed:ad:8f:7d:d3:
     34:c0:87:79:61:a7:b9:8c:1d:8c:45:0d:c4:df:a8:
     ea:22:0c:5b:f2:0c:6b:11:8e:2b:f6:6a:9e:b0:1d:
     ef:53:e7:ba:32:28:ee:98:d4:83:10:63:64:c2:4f:
     44:12:51:f2:a6:31:68:30:d2:f9:8d:7a:bf:23:09:
     18:a4:ab:0a:21:fc:25:88:ba:09:5a:70:82:33:41:
     93:f8:d8:0a:b4:38:ae:47:8c:4a:d1:88:d1:af:b6:
     18:77:b8:84:4e:7a:ad:c0:a6:23:e7:94:6c:76:cb:
     0d:da:16:16:cb:a5:0f:75:a6:e0:78:ff:33:e1:d1:
     5b:3c:8d:dd:06:7a:72:e2:be:48:c3:17:4a:4f:bb:
     e0:bb:fb:e6:bd:7e:d4:f8:c1:2a:5a:4f:6a:3a:e0:
     20:e6:63:e5:d5:65:ee:d3:8c:72:22:54:ca:f2:40:
     ef:c1
   Exponent: 65537 (0x10001)
   Attributes: a0:00

Signature Algorithm: sha1WithRSAEncryption
     54:1b:b8:52:28:f1:29:e9:5c:28:bc:e3:f6:58:cd:0f:e8:2c:
     a8:83:1d:d6:f3:6b:46:f8:d5:c6:37:bb:15:f5:34:58:56:3d:
     7b:f1:ce:1d:bf:14:09:fe:fe:f3:f1:07:54:27:60:45:6a:ef:
     88:8b:b7:89:74:77:5e:4d:a5:5c:ea:5c:b8:1c:7a:57:b3:83:
     0d:2e:1e:62:86:f4:01:d4:4d:39:51:25:04:cb:00:33:2a:84:
     5c:ae:0a:a0:6f:65:c7:70:0a:cf:56:95:d1:70:22:05:e1:fc:
     2a:d8:9b:21:3e:05:bb:5c:97:b4:35:67:85:e3:1f:8b:82:31:
     ef:76:0b:17:53:a2:06:43:79:1e:cb:a5:45:1d:6a:c9:d1:04:
     0c:44:d7:87:44:2c:4b:ef:38:5b:72:38:de:ff:74:ae:59:17:
     12:f5:87:8c:00:56:00:3f:f0:d4:08:d2:c1:4b:ae:84:0f:f3:
     d5:dd:ea:48:0b:86:31:82:c5:f5:ae:1d:52:b2:c6:74:62:d1:
     f7:94:43:b2:5d:9a:e5:52:c1:48:10:ff:27:bb:d5:ec:00:b8:
     aa:88:77:c3:36:f9:87:41:d9:da:58:9a:c3:26:8c:ba:e3:19:
     fe:25:42:25:12:b4:d4:79:e1:d9:b9:94:d8:83:90:36:ac:ca:
     c6:a7:b2:9c

Exercice 3.

Expliquez les différents éléments contenus dans cette requête. La clé privée du sujet y figure–t–elle ?

4.3 Demande de signature de certificat

Une fois que vous avez établi une requete de certificat, il vous reste à contacter une autorité de certification qui vous délivrera un certificat signé, après avoir procédé (normalement) à quelques vérifications vous concernant.

L’autorité de certification Père Ubu

Vous jouerez dans ce TP le rôle de l’autorité de certification. Pour cela il vous faut un certificat d’autorité de certification, ainsi qu’une paire de clés. Afin de ne pas multiplier les autorités, vous utilisereztous la très notable autorité Père Ubu dont vous trouverez ici le certificat et la paire de clés RSA.


Un certificat produit par openssl est un fichier au format PEM.

$ cat unCertif.pem -----BEGIN CERTIFICATE----- .... -----END CERTIFICATE-----

Pour visualiser le contenu d’un certificat

$ openssl x509 -in unCertif.pem -text -noout

Exercice 4. Après avoir récupéré le certificat de l’autorité, ainsi que sa paire de clés RSA, cherchez quelle est la date d’expiration du certificat et la taille de la clé.

Création d’un certificat

Pour créer et signer un certificat à partir d’une requête maRequete.pem, l’autorité invoque la commande x509

$ openssl x509 -days 10 -CAserial PereUbu.srl -CA PereUbuCertif.pem -CAkey PereUbuCle.pem -extfile usr.ext -extensions x509_ext -in maRequete.pem -req -out monCertif.pem

dans laquelle

Exercice 5. Crééz un certificat pour votre clé publique. (Lors de la signature du certificat, la commande x509 invite l’autorité certifiante à 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 certificat obtenu avec les options appropriées de la commande x509.

Vérification de certificats

On peut vérifier la validité d’un certificat avec la commande verify. Pour vérifier la validité d’un certificat, il est nécessaire de disposer du certificat de l’autorité qui l’a émis.

$ openssl verify -CAfile PereUbuCertif.pem monCertif.pem

4.4 Signature et chiffrement de courriers électroniques

Lorsque vous disposez d’une paire de clés publique/privée, et d’un certificat 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 chiffrés de la part de vos correspondants qui disposent de votre certificat.

4.4.1 Avec openssl

Signature de courriers

Vous disposez d’un certificat monCertif.pem, d’une clé privée maCle.pem et vous voulez envoyer un courrier signé dont le contenu est dans le fichier blabla.txt à l’adresse haha@palotin.pl. En supposant que tous les fichiers se trouvent dans le répertoire courant, il suffit d’invoquer la commande

$ openssl smime -sign -in blabla.txt -text\ -signer monCertif.pem -inkey maCle.pem\ -from moi@palotin.pl \ -to haha@palotin.pl \ -subject "courrier signe"

Il est bien videmment possible de rediriger la sortie de la comande précédente vers un fichier (avec l’option -out par exemple), ou vers la commande mail.

Vérification de courriers signés

Pour vérifier un courrier signé, il faut disposer du certificat que l’émetteur a utilisé pour signer, ainsi que celui de l’autorité ayant émis ce certificat. On invoque la commande

$ openssl smime -verify -in courrier.signe \ -CAfile PereUbuCertif.pem
Chiffrement de courriers

Pour envoyer un courrier chiffré, par exemple avec du Triple-DES, à un destinataire dont on dispose d’un certificat sonCertif.pem, il suffit d’invoquer la commande

$ openssl smime -encrypt -in blabla.txt -text \ -from moi@palotin.pl \ -to haha@palotin.pl \ -subject "courrier chiffre" \ -des3 sonCertif.pem

Il est bien videmment possible de rediriger la sortie de la comande précédente vers un fichier (avec l’option -out par exemple), ou vers la commande mail.

Déchiffrement de courriers

Pour déchiffrer un courrier chiffré

$ openssl smime -decrypt -in courrier.chiffre \ -recip sonCertif.pem \ -inkey maCle.pem

maCle.pem est ma clé privée RSA, et sonCertif.pem est le certificat de l’émetteur.

Remarque

Lorsqu’on chiffre un courrier électronique, il faut s’assurer que le destinataire est en mesure de le déchiffrer, autrement dit que le logiciel du destinataire est en mesure de le faire.

4.4.2 Avec Mozilla Thunderbird

La première chose à faire pour pouvoir échanger des courriers signés et/ou chiffrés avec Mozilla Thunderbird est d’importer votre certificat et votre clé privée que vous venez d’obtenir dans la base de données de certificats gérées par votre navigateur.

La base de données de certificats

Vous pouvez consulter cette base de données par le menu Edition/Preferences.

Vous pouvez alors consulter

Importation d’un certificat

Pour importer votre certificat dans votre base de données, il faut créer d’abord une enveloppe PKCS#12. Il s’agit d’une norme de fichier adoptée pour "ficeler" ensemble un ou plusieurs certificats et clés.


Pour créer une enveloppe PKCS#12 contenant votre certificat, votre clé privée, et le certificat de l’autorité ayant signé le votre, il suffit d’invoquer la commande

$ openssl pkcs12 -export -in monCertif.pem \ -inkey maCle.pem -certfile PereUbuCertif.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 certificats 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 certificat dans la liste des votres. Demandez à le visualiser, puis à le vérifier. Votre certificat n’est pas valide car ...

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 certificat (depuis la liste des certificats d’autorités signataires) et cocher la case concernant l’acceptation de cette autorité pour les emails.


Vérifiez maintenant votre certificat.


Envoyer un courrier signé

Pour envoyer un courrier signé, il suffit 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 chiffré

Pour envoyer un courrier chiffré, il suffit de faire la même chose. ATTENTION, vous devez posséder un certificat valide de votre destinataire.