Nous allons mettre en place le service SSL sous le serveur web Apache afin de pouvoir avoir une partie sécurisé sur un site. Nous partons du fait que le serveur Apache est déjà installé sur le système et que notre système d’exploitation tourne sous la distribution Debian. Pour l’installation nous utilisons l’outil aptitude de Debian. L’installation du module SSL pour Apache se réalise grâce à la commande suivante :
apt-get install libapache-mod-ssl
Le module SSL est bien installé mais il n’est pas activé par défaut :
a2enmod ssl
Il faut vérifier que le serveur Apache écoute bien sur le port 443 pour les connexions en https. Pour cela il faut vérifier dans le fichier « /etc/apache2/ports.conf » :
Listen 443
Ensuite il faut configurer le site que l’on veut mettre en place dans « /etc/apache2/site-available/» Par défaut un site est configuré dans le fichier « default-ssl ». On peut l’adapter en fonction de la configuration souhaitée.
ServerAlias liced.fr www.liced.fr
DocumentRoot /var/www/memoire/
ServerName liced.fr
SSLEngine on
Ici nous avons configuré notre virtualhost sur le port 443 en lui donnant le nom du domaine qu’il doit gérer, le répertoire racine du site (DocumentRoot) et la valeur que renvoie le serveur (ServerName). La ligne « SSLEngine on » indique que le SSL doit être actif.
Enfin il est nécessaire d’activer le site manuellement afin de le prendre en considération :
a2ensite default-ssl
Génération d’un certificat SSL
Pour établir la connexion SSL, il faut créer son propre certificat. Nous détaillerons la procédure à suivre pour créer un tel certificat sous Linux ci-dessous.
Tout d’abord OpenSSL doit être installé sur la machine. Nous partons du principe qu’il l’est déjà. Nous pouvons alors créer la clé privée :
openssl genrsa -des3 -out ca.key 2048
La commande « genrsa » génère une clé RSA. L’option –des3 encode la clé privée avec l’encodage tripe DES avant la sortie du résultat. L’option –out ca.key indique le fichier de sortie. Le nombre 2048 est la taille de la clé en bits. A noter que cette commande demande de définir une passphrase qu’il faut retenir. Une fois la clé privée générée le fichier doit être stocké dans un dossier particulier en le protégeant grâce à des droits spécifiques par exemple.
Il faut ensuite créer le certificat en se basant sur la clé RSA que nous venons de générer :
openssl req -new -key ca.key -out ca.csr
L’option –key ca.key spécifie le fichier de clé privée à lire. L’option –ou ca.csr indique le fichier de sortie. L’option –new génère une nouvelle demande de certificat et implique de renseigner certaines informations demandées :
- les deux lettres qui identifient le pays (FR pour la France).
- le nom de du pays.
- le nom de la ville (Paris).
- le nom de l’entreprise ou autre si particulier (Liced).
- le nom du site (liced.fr).
- l’adresse mail de l’administrateur.
Signature du certificat
Deux choix sont envisageables pour signer le certificat généré. Le premier est de signer le certificat soi même. On dit qu’il sera alors auto-signé. OpenSSL permet de le faire grâce à une simple commande. Dans ce cas précis le navigateur internet émettra un message d’avertissement avant d’afficher la page Internet sécurisée en voyant que le certificat n’est pas signé par une autorité de certification. Il faudra manuellement importer le certificat dans le navigateur afin de pouvoir afficher la page en question. Le deuxième choix est de fournir son certificat à un organisme reconnu et spécialisé dans la signature de certificat SSL. Un des plus anciens et des plus connus est VeriSign. La majorité des sites d’e-commerces les plus importants ont signé leurs certificats à l’aide de cette société.
Afin d’éviter de payer ce service chez une autorité de certification j’ai décidé de régler ce problème de signature à l’aide d’un organisme qui propose de signer son certificat gratuitement : Starcom. Cette société affirme qu’elle est reconnue comme autorité de certification dans plusieurs navigateurs tels que Mozilla Firefox et Apple Safari. Ci-dessous voici la procédure permettant de signer un certificat via Starcom.
Starcom vérifie préalablement que nous sommes bien les propriétaires du domaine en question (liced.fr dans notre cas) en envoyant un email à une adresse réservée uniquement à l’administrateur du domaine : postmaster@mondomaine.fr, hostmaster@mondomaine.fr ou webmaster@mondomaine.fr. Cet email va contenir un code d’activation qui va permettre de valider que nous sommes les propriétaires du domaine. Ensuite nous devons fournir notre certificat généré préalablement à Starcom via une interface web. Nous pouvons générer plusieurs certificats signés par domaine en spécifiant des sous domaines. Souhaitant juste avoir une seule signature nous avons renseigné le sous domaine www.
Ajout du domaine dans le certificat
Une fois le sous domaine ajouté. Le certificat signé est généré sous la forme d’un texte au format ASCII. Il suffit de le copier et de le coller dans un fichier texte en le sauvegardant avec l’extension .ctr.
Génération du certificat signé
Ajout du certificat signé sur le serveur
Désormais nous avons tous les éléments dans le but de mettre en œuvre notre connexion sécurisée. Nous avons notre serveur Apache déjà en fonctionnement et notre propre certificat SSL signé par un organisme tiers. Cependant il faut qu’Apache soit capable de présenter le certificat aux clients surfant sur le site web. Pour cela, il faut stocker sur le serveur le certificat signé et la clé privée. Nous avons placé ces deux fichiers (ssl.crt et ca.key) dans le répertoire « /etc/apache2/ssl » que nous avons créé pour l’occasion. Il ne reste plus qu’à ajouter dans le fichier du virtualhost, que nous avons configuré précédemment (/etc/apache2/sites-availables), les deux lignes suivantes indiquant à Apache où se situent la clé et le certificat :
SSLCertificateFile /etc/apache2/ssl/memoire.pem
SSLCertificateKeyFile /etc/apache2/ssl/memoire.key
Une fois ces différentes opérations réalisées le serveur est prêt à accueillir du https. Afin de vérifier si notre configuration fonctionne il faut ouvrir une page hébergée sur le serveur à l’aide d’un navigateur. J’ai tout d’abord testé avec Mozilla Firefox version 3.0 et j’ai constaté que notre certificat n’est pas validé par Firefox. Contrairement à ce qu’annonçait StarCom sur leur site Internet et après vérification dans les options de Firefox, cet organisme n’est pas reconnu en tant qu’autorité de certification par le navigateur. Il est alors nécessaire d’importer manuellement le certificat dans le logiciel de navigation afin d’éviter que ce message d’avertissement apparaisse à chaque connexion. Le cas est similaire avec Apple Safari également annoncé comme un navigateur qui reconnait les certificats de StarCom. Après plusieurs tests j’ai constaté que StarCom est reconnu en tant qu’autorité de certification sur certaines versions. Je n’ai testé toutes les versions disponibles de Firefox mais il semblerait que les dernières mises à jour intègrent cette société.
Malgré ce problème de reconnaissance la connexion reste néanmoins sécurisée grâce à SSL. Le protocole n’a nullement besoin d’un certificat valide pour fonctionner correctement. L’intérêt de faire signer un certificat par un tiers de confiance est d’assurer l’utilisateur que le certificat appartient bien à la personne à laquelle il est déclaré appartenir. Dans notre cas nous savons que le certificat que nous avons généré appartient bien au domaine liced.fr puisque le domaine nous appartient. Cependant lorsque l’utilisateur verra le message d’avertissement causé par notre certificat non valide il ne se sentira pas en confiance et stoppera probablement sa navigation.
Une remarque de détail:
Il vaudrait mieux écrire
« Le module SSL est bien installé mais par défaut il n’est pas activé »
au lieu de:
« Le module SSL est bien installé mais il n’est pas activé par défaut : »
car on pourrait lire « n’est pas activé-par-défaut » au lieu de « n’est-pas-activé par défaut »
qui laisse entendre que tous les services de l’apache vont passer en https…
c’est un détail mais ça m’a laissé perplexe
merci pour cette doc très claire sur les certificats auto-signés