TP Cryptographie Utiliser la machine virtuelle : devil crypto.tar.bz2!! Utiliser l'annexe en fin de TP. Le serveur devil sera considéré comme le serveur web, de plus il met à disposition: Le login administrateur : root password : tototo Un login utilisateur : admin pasword : azerty Seul les services ssh et http/https sont accessibles depuis le poste de travail vers le serveur Repérez l'adresse ip du serveur web devil Partie A : Cryptographie classique avec openssl On se propose depuis le compte local de la Mandriva d'envoyer un messages chiffré puis un autre signé à l'utilisateur admin de la devil. 1) Préparation Sur le serveur devil en utilisant le compte admin : a) Génération d'une bi clé RSA de 2048 bits protégée par un chiffrement en 3DES Créez une clé privée RSA de 2048 bits protégée par un chiffrement en 3DES Regardez la clé ainsi créée, puis commentez les informations du fichier KeyPriv.pem? Clé privée de type RSA chiffré en 3DES (protection) Affichez les informations du fichier KeyPriv.pem en format texte sans le chiffrage 3DES b) Créez la clé publique associée à la clé privée Affichez les informations du fichier KeyPub.pem en format texte c) Installez la clé publique de l'utilisateur admin sur le serveur web de la devil en utilisant la possibilité d'un répertoire publique (web) pour utilisateur via le serveur apache. Créez un fichier index.html avec la possibilité de récupérer cette clé publique par le web pour des personnes extérieures d) Ajoutez un condensat (au format SHA 1) de votre clé publique qui sera affiché sur la page web d'admin au côté de la clé publique.
2) Chiffrement d'un fichier texte Sur le poste de travail Mandriva, avec votre compte utilisateur : Créez un document texte de quelques lignes dans un fichier : message.txt Ceci est un message confidentiel! Ne pas laisser en clair Appelez le message chiffré : message.chiff a Récupérez la clé publique de l'utilisateur admin et vérifiez que le fichier récupéré est sans erreur (voir le condensat après téléchargement) b Utilisez la clé publique pour chiffrer le message et supprimer le message original. c Envoyer à l'utilisateur admin le message chiffré (par un transfert de fichier sécurisé) 3) Déchiffrement d'un fichier texte Sur le serveur web, en utilisant le compte admin : Déchiffrez le message ainsi envoyé 4) Signature d'un message: Sur le serveur devil compte admin : Admin veut répondre à l'utilisateur qui lui a envoyé le message qu'il a bien lu le message. Il envoie donc un autre message en clair, mais signé : response.txt. On appellera le fichier comportant la signature : reponse.sign J'ai bien reçu et pris note de ton message Signe : admin a Signez le message reponse.txt avec openssl, en récupérant les informations cryptographiques liées à la signature dans le fichier reponse.sign
b Installez le fichier signature lié au fichier reponse.txt sur le site web. Créer le lien adéquat pour télécharger le fichier reponse.sign c Réception et contrôle du message signé: Sur le poste de travail Mandriva, compte utilisateur : Récupérez le message reponse.txt par transfert de fichier et vérifiez qu'il a bien été créé par admin (en récupérant la partie signée reponse.sign) et en utilisant openssl dgst Ajoutez un caractère (blanc ou autre) dans le fichier reponse.txt et vérifier de nouveau la validité du message. PARTIE B : Création d'une Autorité de Certification On se propose maintenant de créer une AC, afin de délivrer des certificats à des serveurs ou personnes, ces certificats pourront être vérifier auprès de cette AC. 1) Création une autorité de certification racine ARS : Avec les informations de suivantes : Nom de l'organisation : Formation Permanente de Jussieu Nom de l'unité : ARS http://192.168.xxx.xxx/~admin/ (Common Name) certificat racine valide 2 ans La création de cette AC se fera dans le compte admin (par défaut dans le répertoire democa). a Mise en place de l'ac avec le script CA.pl. Trouvez ce script (lire son entête) et son fichier de configuration associé. Editez le script de création de l'ac pour changer la durée de vie du certificat racine ($DAYS) de 1 an à 2 ans (sous le compte root) b Dans le répertoire d'accueil du compte admin, créer l'ac à partir du script (avec la bonne option).
Afficher le certificat de l'ac: Vérifiez alors la durée de vie du certificat de l'ac? Créez un condensat du certificat de l'ac en utilisant la commande x509 de openssl Convertissez le fichier cacert.pem au format.crt 2 Mise à disposition du certificat racine sur le serveur web de l'ac a Installez le certificat cacert.pem et son condensat sur une page web à l'adresse http://192.168.xxx.xxx/~admin/, son chargement se fera en cliquant sur un lien b Installer le certificat de l'ac dans le navigateur, vérifiez les paramètres, comparez avec ceux donner avec openssl (affichage en clair du certificat pem avec openssl) PARTIE C : Mise en place d'un certificat d'un serveur Web HTTPS On se propose maintenant de créer un service web sécurisé utilisant un certificat signé par l'ac précédemment créée. 1 Création d'un certificat pour un serveur web Avec les informations de suivantes : d'une durée d'1 an soit signé par l'ac nom du certificat et sa clé : certificat_websrv.pem, certificat_websrv.key a Créer un certificat non signé (appelé requête) pour le serveur Web ainsi que sa clé associée dans le même fichier nommé : newreq.pem dans le répertoire admin. On utilisera pour cela le script CA.pl. b Signez le certificat obtenu par l'ac (toujours en utilisant le script CA.pl)
Comment se nomment le nouveau certificat et sa clé associée? Changer les noms des fichiers en webcert.pem et webkey.pem. Supprimer le fichier inutile. # c Vérifiez les différents enregistrements (ajout de la référence, indexage) dans la base de données de l'ac Ajout d'une référence dans la base Le fichier index.txt contient les références des certificats créés par OpenSSL. Les enregistrements sont annotés avec un R pour indiquer que le certificat est révoqué, V qu'il est valide et E qu'il a expiré Vérifier son chaînage avec l'ac 2 Installation du certificat du serveur Web Installer Le certificat sur le serveur Web. Le serveur apache utilise 2 fichiers server.crt (certificat), server.key (clé privée). Afin de créer un certificat affichable sur le web, on continue par ôter du certificat tout ce qui n'appartient pas à la section CERTIFICATE. Pour cela on convertit le certificat.pem en.crt a Créez un certificat.crt et d'une clé.key à partir des fichier.pem L'installation nécessite d'utiliser le compte root pour changer les paramètres du serveur Web. Repérer les fichiers de configuration du serveur Web. Chercher les paramètres liés au serveur SSL Modifiez le fichier de configuration du serveur web en changeant les chemins des certificats afin d'aller chercher ceux nouvellement créés dans le compte admin. Configurer aussi les accès aux certificats de l'ac. Modifiez aussi le le nom du serveur web par l'adresse ip du serveur (configuration apache). b Vérification du certificat du serveur web via le navigateur qui possède le certificat de l'ac. https://192.168.143.133/~admin/ double cliquez sur le cadenas une fois la page web affichée et vérifiez que le serveur possède bien les certificats liés à l'ac.
NOM openssl OpenSSL Outil de ligne de commande ANNEXE OPENSSL SYNOPSIS openssl commande [ options_commande ] [ arguments_commande ] openssl [commandes standard liste commandes signature messages liste commande chiffrementliste] DESCRIPTION OpenSSL est un utilitaire cryptographique qui implémente les protocoles réseau Secure Sockets Layer (SSL v2/v3, Couche de sockets sécurisés) et Transport Layer Security (TLS v1, sécurité pour la couche de transport) ainsi que les standards cryptographiques liés dont ils ont besoin. Le programme openssl est un outil de ligne de commande pour utiliser les différentes fonctions cryptographiques de la librairie crypto d'openssl à partir du shell. Il peut être utilisé pour o Création de paramètres des clefs RSA, DH et DSA o Création de certificats X.509, CSRs et CRLs o Calcul de signature de messages o Chiffrement et Déchiffrement o Tests SSL/TLS client et server o Gestion de mail S/MIME signé ou chiffrés Le programme openssl fournit une variété de commandes, dont chacune possède de nombreuses options et arguments. COMMANDES rsa : Gestion données RSA (Affichage des clés par exemple) genrsa : Génération de paramètres RSA (création de clés privée/publique) dgst : Calcul de signature ou de condensat d'un message (MD5 par défaut) rsautl : Gestion données RSA (chiffrer et déchiffrer) verify : Vérification du certificat X.509 (appartenance à une AC) x509 : Gestion de données ou changement de format pour le certificat X.509 OPTION COMMANDES sha1 : Signature SHA 1 des3 : Ces options encodent la clé privée avec l'encodage triple DES avant la sortie du résultat binary : affiche le sommaire sous forme binaire. encrypt : chiffrent les données d'entrée en utilisant une clef de public RSA decrypt : déchiffrer les données d'entrée en utilisant une clef privée RSA sign : signature digitale du sommaire utilisant la clé privée troucée dans ``nomfichier''. signature : la signature à vérifier. verify : vérifie la signature utilisant la clé publique de ``nomfichier''. Le résultat est soit ``Verification OK'' soit ``Verification Failure''. in : Ceci indique le nom de fichier d'entrée des données lues de ou à l'entrée standard si cette option n'est pas indiquée
out : nom de fichier de sortie, la sortie standard par défaut pubin : le fichier de clé publique d'entrée, par défaut ce devrait être une clé publique RSA inkey : le fichier de clé d'entrée, par défaut ce devrait être une clé privée RSA CAfile : Un fichier des certificats de confiance. Le fichier devrait contenir les certificats de l'ac dans le format de PEM ( vérificattion de la chaîne) verbose : affiche les informations supplémentaires sur les opérations étant exécutées hash : création d'un condensat pour des certificats X.509 noout : affichage à l'écran SYNOPSIS simplifié : openssl genrsa [ out nomfichier] [ des] [ des3] [ idea] [ f4] [ 3] [nombrebits] openssl dgst [ md5 md4 md2 sha1 sha mdc2 ripemd160 dss1] [ hex] [ binary] [ out nomfichier] [ sign nomfichier] [ verify nomfichier] [ signature nomfichier] [fichier...] openssl rsautl [ in file] [ out file] [ inkey file] [ pubin] [ sign] [ verify] [ encrypt] [ decrypt] openssl verify [ CApath directory] [ CAfile file] [ verbose] [certificates] openssl x509 [ hash] [ in filename] [ out filename]