sécurité du si - Publications de Michael BETTAN
Transcription
sécurité du si - Publications de Michael BETTAN
M I N I - P K I S RS Epita Promo 2009 SÉCURITÉ DU SI SUJET (3): Mini PKI Version : 1.0 Denoun Jérémy De Daniloff Cyril Bettan Michael 14 - 16 rue voltaire 94230 Kremlin Bicêtre - SRS Introduction Objectif Le dossier suivant a pour objectif de décrire la mise en place d’une infrastructure de PKI (mini) dans un objectif de sécurisation et d’authentification sur un système d’information Outils Pour mettre en place le service, nous avons utilisé les outils standard d’une distribution *UNIX/BSD : • un Shell • la librairie OpenSSL. En effet après une analyse de l’état de l’art en matière de PKI, il apparaît qu’une autorité de certification valide peut être mise en place avec OpenSSL en personnalisant le fichier de configuration “openssl.cnf” et en rédigeant un script “enveloppe” afin de faciliter l'exécution de tâche courante. Application Dans un second temps nous avons mis en place, une infrastructure Serveur Web / Client basée sur le protocole HTTPs (SSLv3) dans l’objectif d’identifier un client par son certificat personnel. Dans la suite du document, l’on supposera les pré-requis suivant : • La disponibilité d’un serveur sous Linux / Debian • L’installation du paquet standard Apache 2 S R S E p i t a 2 0 0 9 Mini-PKI 1 Mise en Place Certification On génère un certificat pour le serveur web à sécuriser. On vérifiera que le nsCertType contient bien “server”, pour éviter certain warning on pourra donner comme Common Name au certificat serveur, le nom du domaine hébergé. # openssl genrsa -out apache-ssl-key.pem # openssl req -key apache-ssl-key.pem -out apache-ssl.csr -new # ./mini-pki user-sign apache-ssl.csr On transfère de manière sécurisé (scp par exemple), les fichiers apache-ssl-key.pem vers /etc/apache2/server.key , apache-ssl.crt vers /etc/apache2/server.crt , on transfère également le certificat de la CA vers /etc/apache2/CA.crt du serveur web enfin on transfère la CRL (vers /etc/apache2/cert.crl). On fera attention au droit à appliquer au différent fichier afin de protéger la lecture des curieux. Configuration Apache Afin de faire fonctionner apache correctement, on active les modules suivant : #a2enmod ssl #a2enmod header On modifie également le fichier ports # cat /etc/apache2/ports.conf Listen 80 Listen 443 # indique à Apache d’écouter sur le port 443 S R S E p i t a 2 0 0 9 Mini-PKI 2 Pour mettre en place notre application on configure le vhost suivant : # cat /etc/apache2/sites-available/ssl NameVirtualHost *:443 <VirtualHost *:443> ServerName "srs.epita.fr" #de préférence le ServerName doit correspondre au DocumentRoot /data/web/ssl/ # CommonName du certificat serveur SSLEngine on SSLOptions +StrictRequire +StdEnvVars +ExportCertData SSLProtocol -all +SSLv3 #Autorise uniquement le protocole SSLv3 SSLCertificateFile /etc/apache2/server.crt #Certificat du serveur SSLCertificateKeyFile /etc/apache2/server.key #Clef privée du serveur SSLVerifyClient require #Demande au client de s’identifier SSLVerifyDepth 2 #Nombre d’intermédiaire maximum SSLCACertificateFile /etc/apache2/CA.crt #Certificat du CA <IfModule mime.c> AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl </IfModule> # A ajouter si le serveur met a disposition des certificats ou crl SSLCARevocationFile /etc/apache2/cert.crl # CRL en cours (a mettre a jour en cas de changement) RequestHeader RequestHeader RequestHeader RequestHeader RequestHeader set set set set set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}e" SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}e" SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}e" SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}e" SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}e" #Le mod Header nous permet d'insérer pour php les variables serveurs SSL dans le # header informations auquel PhP pourra accéder. </VirtualHost> On active notre vhost par : #a2ensite ssl enfin on redémarre apache avec #/etc/init.d/apache2 restart Pour finaliser notre application on crée le fichier index.php dans le dossier /data/web/ssl Bonjour M. <?= $_SERVER["SSL_CLIENT_S_DN_CN"] ?> <br> Votre numéro de certificat est : <?= $_SERVER["SSL_CLIENT_M_SERIAL"] ?><br> Votre adresse email est : <?= $_SERVER["SSL_CLIENT_S_DN_Email"] ?> Notre serveur est maintenant prêt à recevoir les connexions. S R S E p i t a 2 0 0 9 Mini-PKI 3 Configuration Client La configuration du client afin d’installer les différents certificats pour Internet Explorer se fait très facilement. Tous d’abord on récupère sur le poste client (de manière sécurisé de préférence) le certificat de l’autorité de certification, et le ou les certificats personnels. Le certificat de la CA au format X509, entraîne l’affichage d’un avertissement lors de la consultation des pages, nous avons donc privilégier le certificat au format DER (encodage base64) généré par notre script mini-pki (option). Un double clique sur le fichier lance le processus d’installation du certificat. A l’issue de cette étape notre Autorité de certification apparaît dans les autorités racines de confiance du système S R S E p i t a 2 0 0 9 Mini-PKI 4 On importe ensuite les certificats dans Internet Explorer. ! ! Pour assurer une diffusion sécurisé du certificat on peut utiliser le format PKCS12 qui inclut la clef privée et le certificat en son sein et assure une protection par mot de passe lors de son importation ! S R S E p i t a 2 0 0 9 Mini-PKI 5 Une fois les certificats personnels importées, lors d’un accès sécurisés avec authentification l’on obtient une invite de sélection de certificat. On notera que selon les versions d’Internet Explorer, le système classe par défaut nos certificats en “autres personnes” et donc ne propose pas l’identification par ce certificat lors de la visite d’un site nécessitant une identification. Dans ce cas il faut sélectionner la rubrique “certificat personnel”. ! Une fois tous les éléments mis en place on peut visiter la page web qui affiche bien les bonnes informations. Vérification CRL Afin de vous assurer qu’a chaque visite du site Internet Explorer identifie bien la CA, il faut vous assurer que l’option : Outils -> Options Internet -> Avancée ->Vérifier la révocation serveur (A VERIFIER) est bien cochée. Du coté serveur l’option SSLCARevocationFile nous assure cette vérification. On révoque un certificat pour tester notre système, on obtient bien : S R S E p i t a 2 0 0 9 Mini-PKI 6 ! BONUS : vérification par OCSP Tous d’abord, notre cahier des charges ne nous permet d’assurer une vérification OCSP coté client, car cette fonctionnalité n’est implémentée sous Internet Explorer 7 que dans sa version Windows Vista. Nous avons donc utilisée Mozilla Firefox sur Windows XP qui assure cette vérification. S R S E p i t a 2 0 0 9 Mini-PKI 7 Coté serveur, l’affaire est plus difficile car le support de cette fonctionnalité n’as pas encore été intégré dans la version stable d’apache et de son module mod_ssl. Grâce aux différentes explications nous avons réussit a compiler une version qui prend en charges cette fonctionnalités. http://sitola.fi.muni.cz/~tauceti/?HowTo:Apache_OCSP http://hecker.org/mozilla/foundation-activities-2007-08-31 wget http://www.uniontransit.com/apache/httpd/httpd-2.2.3.tar.bz2 wget http://sitola.fi.muni.cz/%7Etauceti/?download=ocsp_apache_2.2.patch cd modules/ssl patch < ocsp_apache_2.2.patch aptitude install libssl-dev libssl0.9.8 ./configure --prefix=/home/bclass/apache2 --enable-ssl=shared --enable-maintainer-mode Une fois la version compilée nous remplaçons SSLCARevocationFile par (dans le vhost) # SSLOCSPEnable on # SSLOCSPDefaultResponder http://sd-1504.dedibox.fr:8888/ # SSLOCSPOverrideResponder on Le serveur ira donc vérifier par l’OCSP la validité du certificat. Critiques & Conclusion Les autorités de certification donne des outils de sécurisation pour le système d’information, les mécanismes sont certes bien rodés mais au vue des particularités de la génération des certificats, on peut retenir de ce dossier que la difficulté se situe au niveau des processus organisationnel autour de cette PKI plutôt que la difficulté technique des outils. On devra s’assurer que les clef privée sont stockés de façon sécurisés et que les problématiques législatives sont respectés, afin de mettre en oeuvre un système stable et conforme. D’autre part, la librairie OpenSSL fournit des outils de base pour cette PKI, si la direction informatique souhaite un outil de base cela peut très bien suffire (en particulier grâce au projet OpenCA) cependant des entreprises de sécurités fournissent des infrastructures (souvent dans une solution globale) pour résoudre cette problématique. Cependant on remarque que de nouveaux services apparaissent (tels OCSP) qui résolvent des problématiques différentes (montée en charge, cryptage), il faut donc faire attention que les outils utilisés assure un suivi et une maintenance du support des fonctions SSL. PJ au dossier : mini-pki : Script de gestion de la PKI && openssl.cnf : Configuration d’OpenSSL S R S E p i t a 2 0 0 9 Mini-PKI 8 Fiche d’identification du document Cycle éditorial Etudiant Denoun Jérémy 1/04/2008 - 18/04/2008 Etudiant De Daniloff Cyril 1/04/2008 - 18/04/2008 Etudiant Bettan Michael 1/04/2008 - 18/04/2008 Professeur Sébastien Bombal 18 avr. 08 Texte(s) de référence Historique des versions Version Date d’application Date de retrait Diffusion S R S E p i t a 2 0 0 9 Mini-PKI 9
Documents pareils
Utilisation de OpenSSL et de mod_ssl avec les cartes CPx et les
15.2.4 Configuration des postes clients se connectant vers un serveur présentant un certificat
« CSA - Classe 4 » ASIP Santé............................................................................