====== mod_ssl et certificats ======
Lorsqu'une connexion est initié tous les paquets passent en clair sur le réseau. Une personne peut alors capturer les paquets grâce à des logiciels comme [[http://www.wireshark.org/|Wireshark]] et étudier le trafic. Lorsque l'échange ne concerne que des simples demandes de pages web cela n'est pas grave mais lors de la connexion à une interface administrateur via login et mot de passe cela peut être problématique. En effet, la personne mal intentionnée pourra trouver sans trop de difficultés les identifiants utilisés.
Pour sécuriser les actions sensibles faites au travers de HTTP, il existe une technique consistant à utiliser une version chiffrée du protocole : HTTPS. Ce dernier exploite [[http://fr.wikipedia.org/wiki/Transport_Layer_Security|TLS]] (anciennement nommé SSL) pour sécuriser les échanges.
Pour utiliser HTTPS, il faut installer le **mod_ssl** de Apache :
aptitude install libapache2-mod-ssl
Il faut ensuite modifier le fichier ///etc/apache2/ports.conf// pour que le serveur puisse écouter sur le port 443. On y ajoutera ceci :
Listen 443
Puis on active le module SSL :
a2enmod ssl
Dans Debian, Apache et son module SSL sont livrés avec un certificat TLS de base mais qui n'est pas reconnu par les navigateurs. Afin de ne pas avoir à faire à l'avertissement que les navigateurs affichent si le certificat n'est pas reconnu, il faut faire générer ce dernier par une autorité de certification reconnue. Malheureusement, ceci est souvent payant mais une entreprise propose des certificat de classe 1 gratuitement : [[http://www.startcom.org/|StartCom]]. La procédure de demande d'un certificat est relativement simple et rapide à suivre, il faut toutefois penser à stocker le certificat en lieu sûr après sa récupération.
Une fois le certificat obtenu, il faut configurer le ou les virtual hosts pour qu'ils l'utilisent. On commence donc par créer un répertoire //ssl// dans ///etc/apache2/// et on y met tous les fichiers nécessaires à l'utilisation du certificat.
mkdir /etc/apache2/ssl
Enfin, on modifie le ou les virtual hosts en ajoutant ces quelques lignes :
SSLEngine On
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/apache2/ssl/mon_certificat.crt
SSLCertificateKeyFile /etc/apache2/ssl/mon_certificat.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem
Si l'on utilise le [[mod_macro|mod_macro]], on peut facilement se faire une macro pour se simplifier la vie.
SSLEngine On
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/apache2/ssl/$cert.crt
SSLCertificateKeyFile /etc/apache2/ssl/$cert.key
SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
SSLCACertificateFile /etc/apache2/ssl/ca.pem
Lors du redémarrage de Apache un mot de passe est demandé. Ce mot de passe correspond à celui donné lors de la génération du certificat SSL. Si l'on souhaite ne pas devoir rentrer ce mot de passe à chaque fois, il est possible de déchiffrer le fichier clé du certificat.
cd /etc/apache2/ssl
openssl rsa -in mon_certificat.key -out mon_certificat.key
Après un nouveau redémarrage de Apache, on doit pouvoir utiliser le protocole HTTPS pour naviguer sur le site protégé.
Note : Il se peut que le navigateur n'affiche pas l'indicateur de certificat. Ceci est souvent dû à l'utilisation de contenu extérieur au site et non-sécurisé. Il faut alors par exemple avoir une copie locale du contenu ou le récupérer également via HTTPS si le site extérieur le propose.