Je voulais gérer de l’authentification sur un de mes serveurs Web mais qui serve différentes applications.
exemple www.mondomaine.fr , portail.mondomaine.fr, … le tout sur le même serveur
bien sur je veux une sécurité forte mais qui soit simple (je suis aussi utilisateur), et bien entendu gratuite.
pour pouvoir bookmarker n’importe quelle url il faut que le sso soit sans etat.
dernier point, ca doit marcher depuis un telephone …
solution devenir ma propre autorité de certification. j’ai trouvé de nombreux sites mais il manque toujours des morceaux d’explications qui font que ca ne marche pas.
une autorité de certificat c’est un certificat racine qui permet de delivrer des certificats pour des serveurs web ou des utilisateurs.
l’interet de passer par verisign et autres est que les certificats générés sont reconnus directemet par les browsers car la cle publique du certificat racine est intégrée dans les browsers web. le browser reconnait directement le certificat du serveur web.
en se créant son certificat racine on ne dispose pas de cette facilitée, par contre c’est gratuit pour un nombre de certificats serveurs et clients illimités … et quand ce n’est pas un site web public ce n’est pas très grave !
donc le certificat racine va me permettre de générer les certificats pour les serveurs www.mondomaine.fr … et pour les clients (moi essentiellement !).
l’interet d’un certificat client est qu’il est nominatif, il n’y a que moi a l’avoir.
il permet au serveur avec un peu de configuration (donnée ci dessous) de l’authentifier, pas besoin de user/password ! la solution est plus sécurisée et plus pratique !
comment faire ?
je suis parti au final de cette explication relativement simple http://sewww.epfl.ch/SIC/SA/SPIP/Publications/article.php3?id_article=1124.
ma configuration est une debian sarge comme serveur (version dedibox)
je derecommande cependant d’utiliser leur nommage a moins de vouloir etre perdu au bout de quelques minutes…
pour les serveurs j’ai des noms du type www.mondomaine.fr.req.pem pour une request au format pem et ainsi de suite pour tous les fichiers. pour les utilisateurs j’utilise de DN plutot que nom prenom qui peut preter a ambiguité.
autre astuce pour m’y retrouver, creer un repertoire CAdomaine pour pouvoir gerer plusieurs autorités de certifications facilement plutot que de tout mettre dans demoCA.
piege non expliqué dans la doc … il faut toucher au fichier openssl.cnf
la variable ‘dir’ doit etre configurée pour pointer vers le repertoire que l’on vient de créer (CAdomaine).
ensuite lorsque vous generez des certificats serveurs il faut ses variables dans le fichier openssl.conf :
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
et lorsque l’on veut générer des certificats clients :
keyUsage = digitalSignature, keyEncipherment, nonRepudiation
extendedKeyUsage = clientAuth, emailProtection
Il y a peut etre d’autres valeurs possibles mais au moins pour l’authentification client ca fonctionne.
autre piege, lorsque l’on genere des certificats, il faut faire attention a l’organisation, il faut prendre toujours la même sinon ca ne marche pas !
coté apache 2 ma configuration est la suivante :
ServerName mondomaine
DocumentRoot /var/www/mondomaine/
SSLEngine on
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /usr/lib/ssl/CAdomaine/mondomine.cert.pem
SSLCertificateKeyFile /usr/lib/ssl/CAdomaine/mondomaine.key.pem
SSLVerifyClient none
SSLCACertificatePath /usr/lib/ssl/CAdomaine/
SSLCACertificateFile /usr/lib/ssl/CAdomaine/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 1
cette configuration permet d’avoir du ssl sur le serveur mondomaine ouvert a tous (une fois le certificat serveur accepté). pour acceder au repertoire staff il faut un certificat client.
dernier petit detail pour ceux qui veulent faire du php … il faut rajouter ces options dans le fichier de configuration d’apache :
SSLOptions +ExportCertData
SSLOptions +StdEnvVars
ca permet au code php ou autre de récuperer des informations des certificats.
cette ligne permet d’afficher le DN du certificat client (généralement le username mais on peut y mettre ce que l’on veut).
une fois que vous avez le username, il ne reste plus qu’a l’utiliser pour assurer les habilitations qui restent encore un autre sujet !