mardi 14 avril 2009

APACHE: SSL sur un multi-hosts

Mon but ici est que les sites web du VirtualHost aient un accès securisé au repertoire /admin, c'est à dire qu'ils transmettent le login/mdp encodé et non en clair. Je ne tiens pas des alertes de sécurité dû au même certificat utilisé pour tous les domaines.

Dans un premier temps nous allons générer notre certificat.

openssl genrsa -out my-ca.key 2048
openssl req -new -x509 -days 3650 -key my-ca.key -out my-ca.crt
openssl x509 -in my-ca.crt -text -noout

Nous avons donc, par l'intermédiaire de la première commande, généré une clé. Par la seconde, nous avons généré le certificat pour qu'il soit fonctionnel 10 ans. Et enfin, par la dernière commande, nous avons rempli ce certificat.

Ensuite nous allons créer le certificat pour le domaine en particulier

openssl genrsa -des3 -out test.com.key 1024
openssl req -new -key test.com.key -out test.com.csr

Important lors de la seconde commande : Dans Common Name il faut mettre le VRAI nom du serveur, exemple : test.com ou www.test.com

openssl x509 -req -in test.com.csr -out test.com.crt -sha1 -CA my-ca.crt -CAkey my-ca.key -CAcreateserial -days 3650

Une fois que tout cela est créé, pour éviter tout piratage, changez les permissions sur les fichiers *.key par cette commande :
chmod 0400 *.key

Nous devons à présent copier ces fichiers dans le répertoire d'Apache, pour cela :
cp test.com.crt /etc/apache2/ssl/ssl.crt
cp test.com.key /etc/apache2/ssl/ssl.key
cp test.com.crt /etc/apache2/ssl/my-ca.crt

Puis creer un virtualHost. Pour les 2 premieres lignes, se referer à l'article "Utiliser le module vhost_alias pour simplifier les virtualHosts"


Options +FollowSymLinks
VirtualDocumentRoot /var/www/%0.0

#SECTION SSL
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key
SSLCertificateChainFile /etc/apache2/ssl/my-ca.crt
SSLCACertificateFile /etc/apache2/ssl/my-ca.crt


Enfin, nous allons modifier le VirtualHost non-ssl (port 80) pour que l'on redirige automatique en sécurisé lorsque l'on invoque /admin.


Options +FollowSymLinks
VirtualDocumentRoot /var/www/%0.0
#GESTION DU SSL
SSLEngine off
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} /admin
RewriteRule ^(.*)$ https://%{HTTP_HOST}:443/admin


Puis on redemarre Apache
/etc/init.d/apache2 restart

Puis on fait des test http/https etc... pour s'assurer que tout est ok.

Plus d'informations sur le sujet
http://francois.openmod.org/blog/index.php?post/2007/05/28/55-apache2-en-mode-securise-sous-debian-etch
http://www.vanstormbroek.nl/blog/?p=4

Aucun commentaire:

Enregistrer un commentaire