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&eacute;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

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

Plus en détail