Vous êtes sur la page 1sur 11

Scurit du Systme dInformation Mini PKI

Nombres de pages : 9

Version : 1.0

Auteurs : HAMROUNI Makram POISSENOT Thomas ROUX Nicolas

Destinataires : BOMBAL Sbastien

Remarques : Aucune.

Tables des matires


1 Introduction .................................................................................................................................................. 1 1.1 1.1.1 1.2 1.2.1 1.2.2 2 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2 2.2.1 2.2.2 2.2.3 2.2.4 3 3.1 3.2 4 4.1 4.2 4.3 4.4 Public Key Infrastructure (PKI) ........................................................................................................................ 1 Pourquoi une PKI ? ................................................................................................................................... 1 Comment ? ........................................................................................................................................................ 1 A quoi servent les certificats ? .................................................................................................................. 1 Notre Mini PKI.......................................................................................................................................... 1 Explication des commandes utilis dans le script ............................................................................................. 2 Cration dun bi-cl ................................................................................................................................... 2 Cration dun certificat auto sign ............................................................................................................ 2 Pour signer un certificat ............................................................................................................................ 2 Pour rvoquer un certificat ........................................................................................................................ 2 Pour (r)gnrer la CRL (Certificate Revocation List) ............................................................................. 2 Pour gnrer un certificat pour lOCSP .................................................................................................... 2 Explication du fichier de configuration openssl.cnf .................................................................................... 2 Politique des certificats ............................................................................................................................. 3 Pour le certificat racine ............................................................................................................................. 3 Pour le certificat de lOCSP ...................................................................................................................... 3 Pour paramtrer ladresse de lOCSP........................................................................................................ 3 Ajout du module SSL apache ......................................................................................................................... 4 Affichage des informations sur la page daccueil de lintranet ......................................................................... 4 vhost.conf .......................................................................................................................................................... 5 index.php ........................................................................................................................................................... 5 minipki.sh .......................................................................................................................................................... 5 openssl.cnf ......................................................................................................................................................... 7

OpenSSL ...................................................................................................................................................... 2

Utilisation des Certificats avec HTTPs ........................................................................................................ 4

Annexes ........................................................................................................................................................ 5

Version 1.0

Mini PKI
SRS 2009

1 Introduction
1.1 Public Key Infrastructure (PKI)
1.1.1 Pourquoi une PKI ?
En utilisant la cryptographie asymtrique, une personne/entit a la possibilit de possder une cl publique et une cl prive. Avec sa cl prive, la personne/entit peut sauthentifier et signer des documents. Le problme est que pour vrifier la signature dun document il faut la cl publique et tre certain que cest bien la cl publique de la personne qui a sign le document (Authentification). Pour rsoudre ce problme, les PKI mettent disposition sur un serveur les clefs publiques des utilisateurs sous la forme d'un certificat numrique. Une PKI (Public Key Infrastructure) est donc un systme de gestion de clefs publiques qui assure la fiabilit de celles-ci des tiers/entits grces des certificats et la cryptographie asymtrique permettant de vrifier ces certificats. On peut notamment, grce la PKI, gnrer des certificats, les renouveler une fois expirs ou les rvoquer. Afin que le systme soit utilisable et sr, on publie les certificats, la liste des certificats rvoqu et on propose lauthentification des entits grce leur certificats ainsi que le recouvrement dun certificat perdu.

1.2 Comment ?
Pour cela, la PKI contient une Autorit de certification (AC). L'autorit de certification est une autorit de confiance qui dlivre et gre des certificats de clef publique et des CRL (Certificate Revocation List) conformes la recommandation X.509. Elle gnre les certificats clef publique et garantit lintgrit et la vracit des informations quils contiennent, en les signant avec sa propre clef prive. Pour cela elle se gnre un bi-cl quelle transforme en certificat et lauto-signe afin de se crer son certificat racine.

1.2.1

A quoi servent les certificats ?

Les certificats, grce des oprations cryptographiques et partir des informations contenus dans le certificat (signature et cl publique) offrent les garanties suivantes pour une transmission de donnes : Confidentialit : Les informations changes deviennent illisibles / Seul le destinataire lgitime des donnes pourra dchiffrer le message. (Opration de chiffrement) Authentification : On peut identifier avec certitude lmetteur des donnes. Non-rpudiation : L'metteur des donnes ne pourra pas nier tre l'origine du message. Intgrit : Les donnes transmises nont pas pu tre modifi/altrs .

1.2.2

Notre Mini PKI


o o o Fabrication de bi-cls pour utiliser la cryptographie asymtrique : Fabrication/publication dun certificat pour certifier la cl publique Rvocation dun certificat (en local ou par serveur OCSP (Online Certificate Status Protocol))

Notre Mini-PKI fournit donc les services suivants :

Version 1.0

Mini PKI
SRS 2009

Page 1

2 OpenSSL
Pour raliser notre Mini AC, nous avons utilis OpenSSL. Nous lavons paramtr selon le fichier de configuration fournit en annexe et pour utiliser openSSL de manire transparente nous avons ralis le script mini-pki.sh fournit lui aussi en annexe.

2.1 Explication des commandes utilis dans le script


2.1.1

Cration dun bi-cl


genrsa : demande la cration dun bi-cl (RSA) -aes256 : le bi-cl nouvellement cr sera chiffr par de lAES 256 bit -out x.key 4096 : chemin o mettre le bi-cl cr + longueur de la cl RSA a crer

2.1.2

Cration dun certificat auto sign


req : pour demander un travail sur un certificat -new : pour demander un nouveau certificat -x509 : Pour demander ce que le nouveau certificat soit auto sign pas lAC -days X : Pour mettre la dure de validit du certificat gale X jours -key x.key : Pour donner le chemin vers le bi-cl prcdemment cr a utilis pour la cration du certificat -out ca.crt : Pour donner le chemin o mettre le nouveau certificat -extensions Y : Paramtre dans le fichier openssl.cnf utiliser pour la cration du certificat

2.1.3

Pour signer un certificat


ca : pour faire appel lautorit de certification -in x.csr : chemin o trouver le certificat signer -out x.crt : chemin o mettre le certificat sign

2.1.4

Pour rvoquer un certificat


ca : pour faire appel lautorit de certification -revoke x.crt : certificat rvoquer

2.1.5

Pour (r)gnrer la CRL (Certificate Revocation List)


ca : pour faire appel lautorit de certification -gencrl : option pour appeler la (r)gnration -out x.crl : chemin ou mettre la liste de rvocation

2.1.6

Pour gnrer un certificat pour lOCSP


Une cl non chiffr par AES ou DES :

openssl req -new -newkey rsa:4096 -nodes -keyout ./miniCA/private/ocsp.key -out ./miniCA/csr/ocsp.csr Puis un certificate : openssl ca -extensions OCSP -in ./miniCA/csr/ocsp.csr -out ./miniCA/cert/ocsp.pem

2.2 Explication du fichier de configuration openssl.cnf


Ci-dessus, la plupart des parties du fichier openssl.cnf est expliqu. Le reste est disponible en annexe Version 1.0 Mini PKI
SRS 2009

Page 2

2.2.1

Politique des certificats


Mise en place de la politique demande pour les certificats : [ policy_match ] countryName organizationName organizationalUnitName emailAddress localityName commonName = match = match = supplied = supplied = supplied = supplied

2.2.2

Pour le certificat racine


[ miniCA_root ] Pour dire quil faut crer un certificat de type racine : basicConstraints subjectKeyIdentifier authorityKeyIdentifier = critical, CA:true = hash = keyid,issuer:always

Pour limiter lutilisation du certificat a la gnration de signature pour des certificat et des listes de rvocation : keyUsage nsComment nsCaRevocationUrl = critical, keyCertSign, cRLSign = "Certificat Racine MiniCA (Dossier PKI)" = http://www.srs.epita.fr/

2.2.3

Pour le certificat de lOCSP


[ OCSP ] extendedKeyUsage = OCSPSigning

2.2.4

Pour paramtrer ladresse de lOCSP


(Ici, cest le localhost) authorityInfoAccess = OCSP;URI:http://127.0.0.1

Version 1.0

Mini PKI
SRS 2009

Page 3

3 Utilisation des Certificats avec HTTPs


3.1 Ajout du module SSL apache
Dans un premier temps, il faut activer le module SSL livr avec la distribution apache de debian. Pour ceci, un lien symbolique vers des fichier ssl.conf et ssl.load de mods-available dans mods-enable, et enlever le port 80 des ports couts afin de ncouter que les connexions scuris. On configure ensuite, les certificats de notre site afin de faire marcher le mode scuris du protocole http (https) : SSLCertificateFile /home/npsr/PKI/miniCA/cert/localhost.crt SSLCertificateKeyFile /home/npsr/PKI/ssl.pem On autorise uniquement les connexions SSLv3 : SSL_PROTOCOL SSLv3 On pass ensuite lintgration de notre CA afin que les clients qui puisse se connecter notre site web soit uniquement les personnes en possession du certificat : SSLCACertificateFile /home/npsr/PKI/miniCA/public/minica.crt SSLVerifyClient require SSLCACertificatePath /home/npsr/PKI/miniCA/ SSLCARevocationFile /home/npsr/PKI/miniCA/public/miniCA.crl SSLVerifyDepth 4 Pour le reste de la configuration de lhost voir le vhost.conf fourni en annexe

3.2 Affichage des informations sur la page daccueil de lintranet


Il faut rajouter dans un premier temps dans la configuration dapache lexport des variables SSL dans les variables php avant de coder la page en elle-mme (voir annexe : index.php) : SSL_Options +StdEnvVars

Version 1.0

Mini PKI
SRS 2009

Page 4

4 Annexes
4.1 vhost.conf
NameVirtualHost *:443 <VirtualHost *:443> ServerName localhost DocumentRoot /var/www/ SSLEngine on SSL_PROTOCOL SSLv3 SSLCertificateFile /home/npsr/PKI/miniCA/cert/localhost.crt SSLCertificateKeyFile /home/npsr/PKI/ssl.pem SSLCACertificateFile /home/npsr/PKI/miniCA/public/minica.crt SSLVerifyClient require SSLCACertificatePath /home/npsr/PKI/miniCA/ SSLCARevocationFile /home/npsr/PKI/miniCA/public/miniCA.crl SSLVerifyDepth 4 CustomLog /var/log/apache2/monsite-ssl-access.log combined ErrorLog /var/log/apache2/monsite-ssl-error.log <Directory "/var/www"> DirectoryIndex index.html index.htm index.php index.php3 Options -Indexes </Directory> </VirtualHost>

4.2 index.php
<? echo "Bonjour M. ".$_SERVER['SSL_CLIENT_S_DN_CN']."<br/><br/>"; echo "Votre numro de certificat est : ". $_SERVER['SSL_CLIENT_M_SERIAL']."<br/><br/>"; echo "Votre adresse email est : ".$_SERVER['SSL_CLIENT_S_DN_Email']; ?>

4.3 mini-pki.sh
#!/bin/sh # Rcupration de l'emplacement du fichier de conf openssl.cnf Version 1.0 Mini PKI
SRS 2009

Page 5

# pour crr au bon endroit la miniCA (cad pour que les # chemins relatifs du fichier openssl.cnf soient corrects rep=`echo $OPENSSL_CONF | sed -e "s/openssl\.cnf$//"` echo $rep if [ $# -ge 1 ] ; then # Cration des dossiers ncssaires la MiniCA pour OpenSSL if [ $1 = 'create-ca' ] ; then mkdir -p $rep/miniCA/public $rep/miniCA/private $rep/miniCA/cert $rep/miniCA/csr touch $rep/miniCA/index.txt touch $rep/miniCA/serial echo "01" >> $rep/miniCA/serial openssl genrsa -aes256 -out $rep/miniCA/private/minica.key 4096 openssl req -new -x509 -days 3650 -key $rep/miniCA/private/minica.key -out $rep/miniCA/public/minica.crt extensions miniCA_root # Test pour le bon usage du certificat openssl x509 -in $rep/miniCA/public/minica.crt -text -noout openssl x509 -purpose -in $rep/miniCA/public/minica.crt -noout fi if [ $1 = 'user-sign' ] ; then str=`echo $2 | cut -d '.' -f 1` openssl ca -in $2 -out $rep/miniCA/cert/$str.crt mv $2 $rep/miniCA/csr/ fi if [ $1 = 'revoke' ] ; then openssl ca -revoke $2 fi if [ $1 = 'gencrl' ] ; then openssl ca -gencrl -out $rep/miniCA/public/miniCA.crl fi Version 1.0 Mini PKI
SRS 2009

Page 6

if [ $1 = 'genocsp' ] ; then openssl req -new -newkey rsa:4096 -nodes -keyout $rep/miniCA/private/ocsp.key -out $rep/miniCA/csr/ocsp.csr openssl ca -extensions OCSP -in $rep/miniCA/csr/ocsp.csr \ -out $rep/miniCA/cert/ocsp.pem fi fi

4.4 openssl.cnf
[ ca ] default_ca = miniCA # La CA par dfaut

#################################################################### [ miniCA ] dir certs crl_dir = ./miniCA = $dir/cert = $dir/public # Le dossier de base de la CA # O sont stocks les certificats signs # O est stock la crl # database # Emplacement pour les nouveaux certifs.

database = $dir/index.txt new_certs_dir = $dir/cert certificate serial private_key

= $dir/public/minica.crt # Certificat racine de miniCA = $dir/serial # Compteur pour les numros de certifs = $dir/private/minica.key # The private key

# Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default cert_opt = ca_default default_days default_md preserve = no = 365 = sha1 # Subject Name options # Certificate field options # how long to certify for # how long before next CRL # which md to use. # keep passed DN ordering

default_crl_days= 30

# A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy Version 1.0 = policy_match Mini PKI
SRS 2009

Page 7

authorityInfoAccess # For the CA policy [ policy_match ] countryName organizationName emailAddress localityName commonName [ req ] distinguished_name x509_extensions signed cert

= OCSP;URI:http://127.0.0.1

= match = match = supplied = supplied = supplied = supplied

organizationalUnitName

#################################################################### = req_distinguished_name = v3_ca # The extentions to add to the self

[ req_distinguished_name ] countryName countryName_default countryName_min countryName_max stateOrProvinceName = Pays (Code de 2 lettres) = FR = 2 = 2 = Departement = IDF

stateOrProvinceName_default localityName localityName_default 0.organizationName

= Ville = Paris = Organisation = Lab SRS = Unit

0.organizationName_default organizationalUnitName

organizationalUnitName_default = Promo2009 emailAddress emailAddress_default emailAddress_max commonName commonName_default commenName_max Version 1.0 = 64 = Commen Name = localhost = 64 Mini PKI
SRS 2009

= Courriel = srs@srs.epita.fr

Page 8

[ req_attributes ] challengePassword challengePassword_min challengePassword_max [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always #################################################################### [ miniCA_root ] basicConstraints subjectKeyIdentifier authorityKeyIdentifier keyUsage nsComment nsCaRevocationUrl [ OCSP ] extendedKeyUsage = OCSPSigning = critical, CA:true = hash = keyid,issuer:always = critical, keyCertSign, cRLSign = "Certificat Racine MiniCA (Dossier PKI)" = http://www.srs.epita.fr/ = Un mot de passe = 4 = 20

####################################################################

Version 1.0

Mini PKI
SRS 2009

Page 9