Top Posters
Since Sunday
A free membership is required to access uploaded content. Login or Register.

TP OpenSSL RSA.docx

Uploaded: 6 years ago
Contributor: tyressjones
Category: Networking
Type: Other
Rating: N/A
Helpful
Unhelpful
Filename:   TP OpenSSL RSA.docx (64.14 kB)
Page Count: 26
Credit Cost: 1
Views: 77
Last Download: N/A
Transcript
Présentation de OpenSSL Protocole SSL Le protocole SSL (Secure Socket Layer) a été développé par la société Netscape Communications Corporation pour permettre aux applications client/serveur de communiquer de façon sécurisée. TLS (Transport Layer Security) est une évolution de SSL réalisée par l’IETF. La version 3 de SSL est utilisée par les navigateurs tels Netscape et Microsoft Internet Explorer depuis leur version 4. SSL est un protocole qui s’intercale entre TCP/IP et les applications qui s’appuient sur TCP. Une session SSL se déroule en deux temps : une phase de poignée de mains (handshake) durant laquelle le client et le serveur s’identifient, conviennent du système de chiffrement et d’une clé qu’ils utiliseront par la suite. la phase de communication proprement dite durant laquelle les données échangées sont compressées, chiffrées et signées. L’identification durant la poignée de mains est assurée à l’aide de certificats X509. 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 s’appuyant 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 d’empreintes (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) OpenSSL est utilisé de cette manière : Lancer la commande : openssl.exe. Une invite de commande est lancée et permet de saisir un ensemble de commandes. 13290557810500 Installer l’outil OpenSSL : Récupérer les deux fichiers : « vcredist_x86.exe », « Win32OpenSSL-1_0_0a.exe ». OpenSSl dans sa version 1.0 nécessite la présence du logiciel Visual C++ 2008. Il est donc plus sage de commencer l’installation de vcredist_x86 puis procéder à l’installation de Win32OpenSSL. Définir une Autorité de Certification "CA" Cette autorité personnelle devra être diffusée auprès des futurs utilisateurs des certificats pour éviter les messages d'alerte concernant une autorité de certification inconnue lors de l'utilisation des certificats générés. Génération des clés Nous allons tout d'abord générer la clé et le certificat de notre CA (autorité de certification), nous avons choisi de faire un certificat autosigné dans le cadre de ce TP, pour une mise en production, il faudra prévoir l'achat d'un certificat trust et la création de clé minimum 1024 bits. On génère la clé privée de notre autorité Cette clé nous permettra de signer tous les certificats émis par notre CA ! L'option des3 permet d'ajouter une passphrase pour crypter notre clé. On peut générer une paire de clés RSA avec la commande genrsa de openSSL. OpenSSL> genrsa -algorithme -out où fichier est un nom de fichier de sauvegarde de la clé, et taille et la taille souhaitée exprimée en bits) du modulus de la clé. Par exemple, pour générer une paire de clés de 1024 bits, stockée dans le fichier ca.key, on tape la commande OpenSSL> genrsa -des3 -out ca/ca.key 1024 Résultat : Generating RSA private key, 512 bit long modulus ...............++++++++++++ ...............++++++++++++ e is 65537 (0x10001) Enter pass phrase for ca.key: Verifying - Enter pass phrase for ca.key: Notez bien cette passphrase, elle vous sera utile pour tout le reste du TP (voir de votre vie) si vous la perdez, il vous faudra tout recommencer ! Une clé privée non cryptée ressemble à ça: OpenSSL> genrsa -out ca/ca.key -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDQG9wvnuLC4aqzaJCAWGA1AxFzg00hjPObhq1mukzsGyuuWBFG vj/k9vFNYX55DHctb/4cXtsZRWWvgcjtYnCVwRu+DAjFsk//kOMfhplmiv9xQ+ZL 8w/Xrnm8JWdSS+S4LCMnsuIiQtLbhMrQnUV02hAtbIZiSM3k6OjShEZhDQIDAQAB AoGAHi0cBW+1k+qjFPbBlUq7UJSMUEKmyYmlvVSPCklTZB0gfVxZzPdDTpEcNks/ yo+rLFSD9Vsvy/9LGmLoXruadWlK67PCUnpM5/oRRGgy8t73YKrxflAU5Gtymjvc ZCf0CAs6wBft3yLU31Qc4WqVM2vTyUH76jebVhxEw8k63OUCQQD/1OmAXV+TxBPG ZTPFbzUeAE5rQqqOW4aoMNvM61Yn/19h6SzY2MfSQvF1BNns/efCRrqOMeyvPWUG g1okfogTAkEA0D7pDf/D2Yu5msbOAGF4QBU1erLzpi/s6Rv6VEPYCGnHQlo3jbg9 FZbjHJ4UcYyYaA8jIrkY+FIJM88YlGbWXwJBAILEdvJ5R/CFCkKf2j2yIWmLaIol En8fw43XI5L0PB7Hxx6KDLVu4XzVYQyahTZBdqR0eMlUNZJBhJE2tO3wi2cCQQCp JkCFd3es0BrNxqfzlThozRFofcz88za7TldydL0YcFtC4Sb4vWsYizwktZ6jcPEm rQz8Gl9W7MO+ynwLptB/AkEA1tsnFXoYzI71enmTdugGxbv0RqAd5iQpDYQkDSdn 2LImp/3YnXNJ9qpY91j87tKthh/Oetu6SHlmLg1LOYNIdw== -----END RSA PRIVATE KEY----- … et une clé privée cryptée à ça: -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,F1AB4765D89854CA twxvZobZKXDaJFv8LBkYlbv2OyP8/X3WeLMyJVhHauhAXzcYlxS1DBWgcp6Lb6Yt LrYS95NSs34ymH84j9kIfu/xp3XPMy+6s/0BMAmSIr+kK1n/0KbaEJHxrEhXKr2b UQtGa8qMC1+z9T8sDXk0CEe8Ar1C14qNseCjON4RTOXQx0HQ2LIJjPdzestZSglQ cFk1xhibSBorsKDWIn91I9+dpDtXL3Os+FLjABkHH3JK2qsk7Tf8zEKjzuVuJJJY mfnH0UJX8qZ3fuJmCJ4FIeh1yhUeELlxlNgxB8lcJudktBO6rD8SomppAhdfkONx Nml97DsFTQopzKf4qDYuMPwv1EtlJu8OO+jZWHiBGn1VDvcePlTxXRdkil1/aO7D ly9RXRUN4Y2D9G+UizBasNUiFNoHmpvudwe+XmGIwoY= -----END RSA PRIVATE KEY----- On peut remarquer les informations sur l'algorithme de cryptage dans les en-têtes PEM de la clé privée cryptée. (Proc-Type: 4, ENCRYPTED DEK-Info: DES-EDE3-CBC, F1AB4765D89854CA). Cela vous permet de vérifier que votre clé a bien été cryptée, sans ces en-têtes, en lisant seulement la clé je suis incapable de vous dire si elle est cryptée ou non. On crée le certificat auto-signé X509 Le certificat est la clé publique de notre CA signé par… heu, notre CA. Je vous rappelle que pour que votre certificat soit trust, il faut normalement le faire signer par une autre CA reconnu, ce qui vous permet de créer une CA intermédiaire. OpenSSL> req -new -x509 -key ca/ca.key -out ca/ca.pem Je vous laisse remplir les informations demandées tout seuls, vous êtes grands ! Je ne vous fais pas l'affront de vous le traduire. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []: Le fichier généré est : -----BEGIN CERTIFICATE----- MIICKzCCAdWgAwIBAgIJAJ5/od5TrWDmMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTAwNzE1MDkxMzI5WhcNMTAwODE0MDkxMzI5WjBF MQswCQYDVQQGEwJGUjETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMzN 5M2f7NP1yohEk4tw+V3LI0wyxWe6guT7sZO0NJDE3qNqK7LE6u6INJeEFUKREdJj DdHieoVJT/26qN0zkSMCAwEAAaOBpzCBpDAdBgNVHQ4EFgQUwLP8aXE8dKQso73D 1oXf2xYCyh0wdQYDVR0jBG4wbIAUwLP8aXE8dKQso73D1oXf2xYCyh2hSaRHMEUx CzAJBgNVBAYTAkZSMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRl cm5ldCBXaWRnaXRzIFB0eSBMdGSCCQCef6HeU61g5jAMBgNVHRMEBTADAQH/MA0G CSqGSIb3DQEBBQUAA0EAAH5/Ml4mqw3rjooMStA7S1gFeDOPvSVdOCdhjiNeA2BW j+pJH49hIKhgptZrW0GbbvjXGAYCq7y9QN676a1BHg== -----END CERTIFICATE----- Transformation au format Microsoft OpenSSL> x509 -in CA_crt.pem -outform DER -out CA_crt.der Il s'agit d'une simple conversion d'un format ascii Base64 en son équivalent binaire  Créer de clés de chiffrement Chiffrer/Déchiffrer un fichier texte Pour générer une clé privée RSA de longueur 1024 dans un fichier rsa.priv : OpenSSL> genrsa -out rsa.priv On peut ajouter du chiffrement avec l'option -algorithme qui peut être -des, -des3, etc. Puis extraire la clé publique RSA dans un fichier rsa.pub à partir de la clé privée : OpenSSL> rsa -in rsa.priv -pubout -out rsa.pub Voyons comment chiffrer un fichier fic.txt en un fichier fic.enc en utilisant la clef publique : OpenSSL> rsautl -encrypt -pubin -inkey rsa.pub -in fic.txt -out fic.enc Puis comment le déchiffrer dans un fichier fic.dec via la clef privée: OpenSSL> rsautl -decrypt -inkey rsa.priv -in fic.enc –out fic.dec Chiffrer avec la clef privée : OpenSSL> rsautl -sign -inkey rsa.pem -in fichier.txt –out fic.dat Déchiffrer via la clef publique: OpenSSL> rsautl -verify -pubin -inkey rsa.pub -in fic.dat -out decod.txt T.P La création des certificats & Leur utilisation dans les serveurs Web Objectifs : Générales Savoir créer des certificats, Savoir intégrer les certificats dans les applications web. Travaux demandés : Création du certificat serveur Génération de la clé privée On génère la clef privée avec la commande suivante en définissant un nom de fichier : OpenSSL> genrsa -out Server/servwiki.key 1024 La sortie attendue est la suivante : Generating RSA private key, 1024 bit long modulus ..................++++++ .................................................................++++++ e is 65537 (0x10001) Si vous souhaitez que cette clé ait un mot de passe (qui vous sera demandé à chaque démarrage d'apache, donc à éviter !), ajoutez "-des3" après "genrsa". Ceci a pour effet de créer une clé SSL (fichier servwiki.key), ne la perdez pas... c'est votre clé privée... (ni éventuellement le mot de passe) ! Vous pouvez observer son contenu : less servwiki.key -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDQG9wvnuLC4aqzaJCAWGA1AxFzg00hjPObhq1mukzsGyuuWBFG vj/k9vFNYX55DHctb/4cXtsZRWWvgcjtYnCVwRu+DAjFsk//kOMfhplmiv9xQ+ZL 8w/Xrnm8JWdSS+S4LCMnsuIiQtLbhMrQnUV02hAtbIZiSM3k6OjShEZhDQIDAQAB AoGAHi0cBW+1k+qjFPbBlUq7UJSMUEKmyYmlvVSPCklTZB0gfVxZzPdDTpEcNks/ yo+rLFSD9Vsvy/9LGmLoXruadWlK67PCUnpM5/oRRGgy8t73YKrxflAU5Gtymjvc ZCf0CAs6wBft3yLU31Qc4WqVM2vTyUH76jebVhxEw8k63OUCQQD/1OmAXV+TxBPG ZTPFbzUeAE5rQqqOW4aoMNvM61Yn/19h6SzY2MfSQvF1BNns/efCRrqOMeyvPWUG g1okfogTAkEA0D7pDf/D2Yu5msbOAGF4QBU1erLzpi/s6Rv6VEPYCGnHQlo3jbg9 FZbjHJ4UcYyYaA8jIrkY+FIJM88YlGbWXwJBAILEdvJ5R/CFCkKf2j2yIWmLaIol En8fw43XI5L0PB7Hxx6KDLVu4XzVYQyahTZBdqR0eMlUNZJBhJE2tO3wi2cCQQCp JkCFd3es0BrNxqfzlThozRFofcz88za7TldydL0YcFtC4Sb4vWsYizwktZ6jcPEm rQz8Gl9W7MO+ynwLptB/AkEA1tsnFXoYzI71enmTdugGxbv0RqAd5iQpDYQkDSdn 2LImp/3YnXNJ9qpY91j87tKthh/Oetu6SHlmLg1LOYNIdw== -----END RSA PRIVATE KEY----- A partir de votre clé, vous allez maintenant créer un fichier de demande de signature de certificat (CSR Certificate Signing Request). On génère la demande de certificat avec la commande suivante : OpenSSL> req -new -key servwiki.key > servwiki.csr Le système va vous demander de saisir des champs ; remplissez-les en adaptant sauf le champ "Common Name" qui doit être identique au nom d'hôte de votre serveur virtuel : Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:CORSE Locality Name (eg, city) []:Ajaccio Organization Name (eg, company) [Internet Widgits Pty Ltd]:LLB Organizational Unit Name (eg, section) []:BTSINFO Common Name (eg, YOUR name) []:wiki.domain1.org Email Address []: Ce n'est pas la peine de saisir d'autres "extra attributes"... Ceci a pour effet de créer le formulaire de demande de certificat (fichier servwiki.csr) à partir de notre clé privée préalablement créée. Ce fichier contient la clé publique à certifier. Un less servwiki.csr nous donne : -----BEGIN CERTIFICATE REQUEST----- MIIBsTCCARoCAQAwcTELMAkGA1UEBhMCRlIxFTATBgNVBAgTDENvcnNlIGR1IFN1 ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExCMREwDwYDVQQLEwhCVFMg SU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZvLmZyMIGfMA0GCSqGSIb3DQEBAQUA A4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12kSbN/NWP0QUiPlksOkF2NkPfwW/m f55dD1hSndlOM/5kLbSBo5ieE3TgikF0IktjBWm5xSqewM5QDYzXFt031DrPX63F vo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLWwc0BzEgFZGGw7wiMF6wt5QIDAQAB oAAwDQYJKoZIhvcNAQEEBQADgYEAwwI4UvkfhBvyRrUXtjrLfZXLxZlF9o+URmHJ ysvrLKfesVBEzdA9mqk1OwIwLfe8Fw2fhip2LGqvcCPxDMoIE/0cDkqGRg9iKp7D DMuy69lPTEB6UtpVKO/1eage0oug6VqdfGAYMMSGyWFuO9FE4UE6HspVodb20wGV 4H8qZuk= -----END CERTIFICATE REQUEST----- Maintenant, deux choix s'offrent à vous : envoyer le fichier servwiki.csr à un organisme (le tiers de confiance ou l'autorité de certification (CA)) et ainsi obtenir le certificat dûment signé par la clé privée de l'organisme (après avoir payé), ou bien signer vous-même le certificat. Ce dernier choix a notre préférence... Création du certificat de l'autorité de certification Pour signer un certificat, vous devez devenir votre propre autorité de certification, cela implique donc de réaliser une clé et un certificat auto-signé. (Objet du TP N°1). C'est notre certificat d'autorité de certification qui va permettre de signer les certificats créés. La signature du certificat serveur par le CA (Certificate Autority) La commande qui signe la demande de certificat est la suivante : OpenSSL> x509 -req -in Server/servwiki.csr -out Server/servwiki.crt -CA CA/ca.crt -CAkey CA/ca.key -CAcreateserial -CAserial ca.srl L'option CAcreateserial n'est nécessaire que la première fois. Il faut saisir la passphrase... Le certificat signé est le fichier "servwiki.crt". La sortie de la commande attendue est la suivante : Signature ok subject=/C=FR/ST=CORSE/L=Ajaccio/O=LLB/OU=BTSINFO/CN=wiki.domain1.org Getting CA Private Key Enter pass phrase for ca.key: Vous avez maintenant un certificat pour votre serveur se nommant servwiki.crt. less servwiki.crt -----BEGIN CERTIFICATE----- MIICVDCCAb0CAQEwDQYJKoZIhvcNAQEEBQAwdDELMAkGA1UEBhMCRlIxFTATBgNV BAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UEChMDTExC MREwDwYDVQQLEwhCVFMgSU5GTzEbMBkGA1UEAxMSc2VydmV1ci5idHNpbmZvLmZy MB4XDTA0MDIwODE2MjQyNloXDTA0MDMwOTE2MjQyNlowcTELMAkGA1UEBhMCRlIx FTATBgNVBAgTDENvcnNlIGR1IFN1ZDEQMA4GA1UEBxMHQWphY2NpbzEMMAoGA1UE ChMDTExCMREwDwYDVQQLEwhCVFMgSU5GTzEYMBYGA1UEAxMPcHJvZi5idHNpbmZv LmZyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSUagxPSv3LtgDV5sygt12 kSbN/NWP0QUiPlksOkF2NkPfwW/mf55dD1hSndlOM/5kLbSBo5ieE3TgikF0Iktj BWm5xSqewM5QDYzXFt031DrPX63Fvo+tCKTQoVItdEuJPMahVsXnDyYHeUURRWLW wc0BzEgFZGGw7wiMF6wt5QIDAQABMA0GCSqGSIb3DQEBBAUAA4GBALD640iwKPMf pqdYtfvmLnA7CiEuao60i/pzVJE2LIXXXbwYjNAM+7Lov+dFT+b5FcOUGqLymSG3 kSK6OOauBHItgiGI7C87u4EJaHDvGIUxHxQQGsUM0SCIIVGK7Lwm+8e9I2X0G2GP 9t/rrbdGzXXOCl3up99naL5XAzCIp6r5 -----END CERTIFICATE----- Il faut maintenant installer le certificat de l'autorité de certification dans chaque navigateur client. C'est ce dernier qui va valider le certificat reçu par le client lors de la requête https://. Installation du certificat d'autorité de certification Pour installer sur votre navigateur le certificat de l'autorité de certification, fichier ca.crt : "Arrangez-vous" pour avoir le certificat disponible à partir du client ( clé usb, ftp, ssh, répertoire partagé...) Sous Windows, un clic droit ou double-clic sur le fichier devrait vous permettre de lancer l'assistant d'installation du certificat dans Internet Explorer. Vous devez l'installer en tant qu'autorité de certification. Vérifiez ensuite que le certificat s'y trouve bien sous le nom de "cert_CA". sur Mozilla : Edition/préférence/Confidentialité et Sécurité/Certificats Bouton de commande : gestion des certificats Onglet : autorité Bouton de commande : importer etc... Il ne reste plus maintenant qu'à configurer apache2. Stoppez Apache et ouvrez votre fichier httpd.conf Rechercher la ligne Listen 80 et rajouter en dessous Listen 443 afin qu'Apache écoute aussi ce port. Rechercher la ligne #LoadModule ssl_module modules/mod_ssl.so Puis décommentez là en enlevant le # devant. Rajouter les lignes suivantes à la fin de votre fichier httpd.conf : SSLMutex default SSLRandoomSeeed startup builtin SSLSessionCache none < VirtualHost 127.0.0.1:443> SSLEngine On SSLCertificateFile conf/ssl/ servwiki.cert SSLCertificateKeyFile conf/ssl/ servwiki.key < /VirtualHost> Voilà ! Si vous avez tout bien suivi correctement, si vous tapez l'URL https://127.0.0.1/ dans votre navigateur, vous devriez voir la fenêtre avec votre certificat et ainsi basculer en mode https. TP2 : RSA et certificats avec openSSL Présentation de openSSL Protocole SSL Le protocole SSL (Secure Socket Layer) a été développé par la société Netscape Communications Corporation pour permettre aux applications client/serveur de communiquer de façon sécurisée. TLS (Transport Layer Security) est une évolution de SSL réalisée par l'IETF. La version 3 de SSL est utilisée par les navigateurs tels Netscape et Microsoft Internet Explorer depuis leur version 4. SSL est un protocole qui s'intercale entre TCP/IP et les applications qui s'appuient sur TCP. Une session SSL se déroule en deux temps une phase de poignée de mains (handshake) durant laquelle le client et le serveur s'identifient, conviennent du système de chiffrement et d'une clé qu'ils utiliseront par la suite. la phase de communication proprement dite durant laquelle les données échangées sont compressées, chiffrées et signées. L'identification durant la poignée de mains est assurée à l'aide de certificats X509. 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 s'appuyant 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 d'empreintes (MD5, SHA, RIPEMD160, ...) le chiffrement et déchiffrement (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. La syntaxe générale de la commande openssl est $ openssl (le $ est le prompt du shell) Dans le texte qui suit, les commandes invoquant openssl supposent que cette commande est dans votre PATH. 3  RSA avec openSSL 3.1  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. $ openssl genrsa -out où fichier est un nom de fichier de sauvegarde de la clé, et taille et la taille souhaitée (exprimée en bits) de la clé. Par exemple, pour générer une paire de clés de 1024 bits, stockée dans le fichier maCle.pem, on tape la commande $ 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 $ cat maCle.pem -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQCveVjLltevTC5kSAiTYjHMVuAR80DHMLWCp3BOVZ49eXwraXxO 7AfKWpA5g0wFZgZNERIfFYaCnvaQDQA+9BRIfsSSr3oSw0My5SD6eg15v0VmJmvP d8LgBypJHbr6f5MXWqntvzp0Qvg6ddeNpUIrqkkh4uDfHFDWqyrkQUCvKwIDAQAB AoGANchUrfnq28DWy0fE0R+cscvC292Z8jN8vrIBWxEk8iSlKU0om6v+a0g8wlP6 3gC6V66uxjY7xxdf7SD+/UykVl4PGFymhLtywSdGlgec3tLgBtV3ytJFilAVDBij LzQwUegCO4zt1JWYc6vvaVdNyQSaGIIeYGsNDWEYlOtDSlkCQQDVRn9JS15G8p+H 4Z0PbU9ZQg2L1u9/SD/kELVe3Kx1fdHulxH0v8V2AgPdXA29Nhi+TxUtC+V8CMc2 KXmAvFsHAkEA0qBDmjHMDPwcGaqbQ2lymYQIGlZ5TLQFA98Dey2uE+CB6pmS/e/Z ilu1IaasuE3vBzXfB/JU7DUkV++JQ7TtvQJBAL2s5dUch2sXqlOhjhpDP/eE7CE6 9WLAsbm2Nmd4YJRZYtQLXPfLeeSapC9BCCMHsnfGQ3H9i4mFEQ6VUi7w1Q8CQAQa pVaS09QI8Y86eM4GdvowzWud9b0d4N8jcFDtIfA3NrDYjzmte8KraMsgEUuCET9F uHPSL/9uRagE/dq44s0CQCMQU4PMqkMtwzCFsV8ZqLmkDPn1binIAwRLYFcsQRDt gTi6rycz3Pk1hCVzBfyMd8zwqpwKmR5FoOXuJEv+mVg= -----END RSA PRIVATE KEY----- 3.2  Visualisation des clés RSA La commande rsa permet de visualiser le contenu d'un fichier au format PEM contenant une paire de clés RSA. $ openssl rsa -in -text -noout 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 $ openssl rsa -in maCle.pem -text -noout Private-Key: (1024 bit) modulus: 00:af:79:58:cb:96:d7:af:4c:2e:64:48:08:93:62: 31:cc:56:e0:11:f3:40:c7:30:b5:82:a7:70:4e:55: 9e:3d:79:7c:2b:69:7c:4e:ec:07:ca:5a:90:39:83: 4c:05:66:06:4d:11:12:1f:15:86:82:9e:f6:90:0d: 00:3e:f4:14:48:7e:c4:92:af:7a:12:c3:43:32:e5: 20:fa:7a:0d:79:bf:45:66:26:6b:cf:77:c2:e0:07: 2a:49:1d:ba:fa:7f:93:17:5a:a9:ed:bf:3a:74:42: f8:3a:75:d7:8d:a5:42:2b:aa:49:21:e2:e0:df:1c: 50:d6:ab:2a:e4:41:40:af:2b publicExponent: 65537 (0x10001) privateExponent: 35:c8:54:ad:f9:ea:db:c0:d6:cb:47:c4:d1:1f:9c: b1:cb:c2:db:dd:99:f2:33:7c:be:b2:01:5b:11:24: f2:24:a5:29:4d:28:9b:ab:fe:6b:48:3c:c2:53:fa: de:00:ba:57:ae:ae:c6:36:3b:c7:17:5f:ed:20:fe: fd:4c:a4:56:5e:0f:18:5c:a6:84:bb:72:c1:27:46: 96:07:9c:de:d2:e0:06:d5:77:ca:d2:45:8a:50:15: 0c:18:a3:2f:34:30:51:e8:02:3b:8c:ed:d4:95:98: 73:ab:ef:69:57:4d:c9:04:9a:18:82:1e:60:6b:0d: 0d:61:18:94:eb:43:4a:59 prime1: 00:d5:46:7f:49:4b:5e:46:f2:9f:87:e1:9d:0f:6d: 4f:59:42:0d:8b:d6:ef:7f:48:3f:e4:10:b5:5e:dc: ac:75:7d:d1:ee:97:11:f4:bf:c5:76:02:03:dd:5c: 0d:bd:36:18:be:4f:15:2d:0b:e5:7c:08:c7:36:29: 79:80:bc:5b:07 prime2: 00:d2:a0:43:9a:31:cc:0c:fc:1c:19:aa:9b:43:69: 72:99:84:08:1a:56:79:4c:b4:05:03:df:03:7b:2d: ae:13:e0:81:ea:99:92:fd:ef:d9:8a:5b:b5:21:a6: ac:b8:4d:ef:07:35:df:07:f2:54:ec:35:24:57:ef: 89:43:b4:ed:bd exponent1: 00:bd:ac:e5:d5:1c:87:6b:17:aa:53:a1:8e:1a:43: 3f:f7:84:ec:21:3a:f5:62:c0:b1:b9:b6:36:67:78: 60:94:59:62:d4:0b:5c:f7:cb:79:e4:9a:a4:2f:41: 08:23:07:b2:77:c6:43:71:fd:8b:89:85:11:0e:95: 52:2e:f0:d5:0f exponent2: 04:1a:a5:56:92:d3:d4:08:f1:8f:3a:78:ce:06:76: fa:30:cd:6b:9d:f5:bd:1d:e0:df:23:70:50:ed:21: f0:37:36:b0:d8:8f:39:ad:7b:c2:ab:68:cb:20:11: 4b:82:11:3f:45:b8:73:d2:2f:ff:6e:45:a8:04:fd: da:b8:e2:cd coefficient: 23:10:53:83:cc:aa:43:2d:c3:30:85:b1:5f:19:a8: b9:a4:0c:f9:f5:6e:29:c8:03:04:4b:60:57:2c:41: 10:ed:81:38:ba:af:27:33:dc:f9:35:84:25:73:05: fc:8c:77:cc:f0:aa:9c:0a:99:1e:45:a0:e5:ee:24: 4b:fe:99:58 Les différents éléments de la clé sont affichés en hexadécimal (hormis l'exposant public). On peut distinguer le modulus, l'exposant public (qui par défaut est toujours 655371), l'exposant privé, les nombres premiers facteurs du modulus, plus trois autres nombres qui servent à optimiser l'algorithme de déchiffrement. Exercice 1 : Donnez une explication du choix de la valeur 65537 pour exposant public par défaut. 3.3  Chiffrement d'un fichier de clés RSA Il n'est pas prudent de laisser une paire de clé en clair (surtout la partie privée). Avec la commande rsa, il est possible de chiffrer une paire de clés2 . Pour cela trois options sont possibles qui précisent l'algorithme de chiffrement symétrique à utiliser : -des, -des3 et -idea. $ openssl rsa -in maCle.pem -des3 -out maCle.pem writing RSA key Enter PEM pass phrase: Verifying - Enter PEM pass phrase: Une phrase de passe est demandée deux fois pour générer une clé symétrique protégeant l'accès à la clé. Exercice 2 : Avec la commande cat observez le contenu du fichier maCle.pem. Utilisez à nouveau la commande rsa pour visualiser le contenu de la clé. 3.4  Exportation de la partie publique La partie publique d'une paire de clés RSA est publique, et à ce titre peut être communiquée à n'importe qui. Le fichier maCle.pem contient la partie privée de la clé, et ne peut donc pas être communiqué tel quel (même s'il est chiffré). Avec l'option -pubout on peut exporter la partie publique d'une clé. $ openssl rsa -in maCle.pem -pubout -out maClePublique.pem Exercice 3 : Q 1 . Notez le contenu du fichier maClePublique.pem. Remarquez les marqueurs de début et de fin. Q 2 . Avec la commande rsa visualisez la clé publique. Attention vous devez préciser l'option -pubin, puisque seule la partie publique figure dans le fichier maClePublique.pem. 3.5  Chiffrement/déchiffrement de données avec RSA On peut chiffrer des données avec une clé RSA. Pour cela on utilise la commande rsautl $ openssl rsautl -encrypt -in -inkey -out où fichier_entree est le fichier des données à chiffrer. 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). cle est le fichier contenant la clé RSA. Si ce fichier ne contient que la parte publique de la clé, il faut rajouter l'option -pubin. fichier_sortie est le fichier de données chiffré. Pour déchiffrer on remplace l'option -encrypt par -decrypt. Le fichier contenant la clé doit obligatoirement contenir la partie privée. Exercice 4 : Chiffrez le fichier de votre choix avec le système symétrique de votre choix. Chiffrez la clé ou le mot de passe utilisé(e) avec la clé publique de votre destinataire (demandez-lui sa clé publique si vous ne l'avez pas). Envoyez-lui le mot de passe chiffré ainsi que le fichier chiffré. Exercice 5 : Il s'agit de déchiffrer le fichier cryptogram13.cbc. Pour cela vous devez récupérer les fichiers suivants (attention la plupart de ces fichiers sont des fichiers binaires) le fichier cryptogram13.cbc (fichier binaire) a été obtenu en chiffrant un texte avec openssl et la commande enc. Le système de chiffrement symétrique utilisé est BlowFish en mode CBC ; la clé BlowFish a été dérivée à partir d'un mot de passe dont voici la version chiffrée ; la clé privée RSA qui a servi à chiffrer le mot de passe ; le mot de passe protégeant la clé RSA, codé en base 64, est VVNUTC1GSUwtUEFD . 3.6  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. $ openssl dgst -out où hachage est une fonction de hachage. Avec openssl, plusieurs fonctions de hachage sont proposées dont MD5 (option -md5), qui calcule des empreintes de 128 bits, SHA1 (option -sha1), qui calcule des empreintes de 160 bits, RIPEMD160 (option -ripemd160), qui calcule des empreintes de 160 bits. Signer un document revient à signer son empreinte. Pour cela, on utilise l'option -sign de la commande rsautl $ openssl rsautl -sign -in -inkey -out et pour vérifier la signature $ openssl rsautl -verify -in -pubin -inkey -out 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é utilisée pour la vérification est la partie publique de la clé utilisée pour la signature. Exercice 6 : Signez le fichier de votre choix, puis vérifiez la signature. Exercice 7 : Des deux fichiers suivants, lequel a bien été signé avec la partie privée de cette cle ? fichier 1, signature 1 fichier 2, signature 2 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 électroniques. 4.1  Génération de la paire de clés Exercice 8 : Générez votre paire de clés RSA d'une taille de 1024 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 9 : 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 : Pays (C), État ou province (ST) Ville ou localité (L) Organisation (O) Unité (OU) Nom (CN) Email Toutes ces informations et d'autres encore sont demandées lors de la création de la requête. Un fichier de configuration (req.cnf) 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=Nord (59), L=Villeneuve d'Ascq, O=Universite de Lille 1, OU=Licence Pro DA2I, CN=Eric Wegrzynowski/emailAddress=Eric.Wegrzynowski@lifl.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:af:79:58:cb:96:d7:af:4c:2e:64:48:08:93:62: 31:cc:56:e0:11:f3:40:c7:30:b5:82:a7:70:4e:55: 9e:3d:79:7c:2b:69:7c:4e:ec:07:ca:5a:90:39:83: 4c:05:66:06:4d:11:12:1f:15:86:82:9e:f6:90:0d: 00:3e:f4:14:48:7e:c4:92:af:7a:12:c3:43:32:e5: 20:fa:7a:0d:79:bf:45:66:26:6b:cf:77:c2:e0:07: 2a:49:1d:ba:fa:7f:93:17:5a:a9:ed:bf:3a:74:42: f8:3a:75:d7:8d:a5:42:2b:aa:49:21:e2:e0:df:1c: 50:d6:ab:2a:e4:41:40:af:2b Exponent: 65537 (0x10001) Attributes: a0:00 Signature Algorithm: md5WithRSAEncryption 1c:ec:06:34:de:80:f1:de:04:86:37:d7:09:1b:c2:d9:f8:48: 8e:de:e2:ea:3c:5f:90:72:81:90:7a:66:db:23:41:04:31:d0: c2:2b:fe:3b:f6:34:31:e3:61:22:b6:be:cb:c2:94:32:37:88: 9a:c4:a2:1f:8e:f7:d6:c7:e0:03:ac:9c:9b:ee:89:a0:35:7b: 9f:ac:fc:b7:33:79:40:c1:ac:c3:b5:77:12:b7:6e:b2:46:b2: 28:fe:13:8d:af:81:30:89:84:70:3c:25:af:e2:ae:44:ee:f4: e2:b1:9e:88:01:bb:a6:fb:43:19:c0:dc:8f:63:1e:c7:af:24: 8b:de Exercice 10 : Explliquez 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 11 : 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\ -in maRequete.pem -req -out monCertif.pem dans laquelle pereUbu.srl est un fichier contenant le numéro de série du prochain certificat à signer (ce fichier est un fichier texte contenant une ligne donnant un nombre codé avec un nombre pair de chiffres hexadécimaux), et l'option -days détermine la durée de validité du certificat (ici 10 jours). Exercice 12 : 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 \ -signer sonCertif.pem \ -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 chiffré" \ -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 où 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 La première chose à faire pour pouvoir échanger des courriers signés et/ou chiffrés avec Mozilla 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 vos certificats (a priori aucun), ceux des personnes dont vous en avez obtenu un, ceux de serveurs WEB sécurisés que vous avez eu l'occasion de rencontrer, et enfin, ceux des autorités de certification que vous connaissez (il y en a plusieurs dizaines normalement, mais cette liste ne contient pas le Père Ubu) 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. Vérifiez aussi la signature du mail de mercredi dernier. 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. 1 openssl n'autorise que deux exposants publics : 65537 (valeur par défaut) ou 3 obtenu avec 'option -3 2 Il est possible de chiffrer le fichier lors de sa génération. Il suffit de mettre l'une des trois options -des, -des3, -idea dans la ligne de commande genrsa.

Related Downloads
Explore
Post your homework questions and get free online help from our incredible volunteers
  1256 People Browsing