AS201281 Wiki

Your check engine light is on!

User Tools

Site Tools


gnu_linux_server:webserver_apache_2:mod_ssl

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 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 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 :

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

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 : 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, on peut facilement se faire une macro pour se simplifier la vie.

<Macro SSL $cert>
  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
</Macro>

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.

gnu_linux_server/webserver_apache_2/mod_ssl.txt · Last modified: 2021/01/04 20:41 by 127.0.0.1