J’aime bien que les services web que j’utilise soient en HTTPS. Je n’aime pas savoir que quand je me connecte à un site quelqu’un a la possibilité technique de connaître mes identifiants. Je n’aime pas non plus que le contenu qui se promène entre le serveur et mon PC soit en clair (aussi peu intéressant que soit ce contenu). C’est pourquoi je tiens à ce que 100% de mon site soit en HTTPS [0].
Donc, pour faire du HTTPS, il faut un certificat ssl. Et il faut que ce certificat soit signé. Alors, si vous ne voulez pas vous emmerdez, vous signez le certificat vous même. Le problème, ce que dès qu’un nouveau visiteur viendra sur votre site pour la première fois, il aura un beau message qui fait peur lui disant que “c’est pas sécurisé”. Il faudra qu’il accepte le certificat, la première fois. Si le certificat change, pour une raison ou une autre, il faudra qu’il l’accepte de nouveau. Donc, l’auto-signature, c’est pour si vous ne voulez pas trop vous faire chier… Mais bon, c’est pas très agréable pour vos nouveaux visiteurs… (et ça dépend aussi de leurs connaissances… certains auront peur, d’autres verrons que c’est auto-signé et comprendrons. bref, ça dépend…)
Une autre solution est assez simple, vous mettez la main au porte-feuille en demandant gentiment à une autorité si elle veut bien signer votre certificat (si vous payez, je suis sûr qu’elle sera d’accord !)
Mais, si on ne veut pas un certificat auto-signé − qui encourage les gens à accepter tous les certificats qui arrivent − et si vous ne voulez pas participer à la mafia des certificats payants, comment faire ? Et bien, c’est là qu’intervient cacert.
Cacert est une autorité de certification gérée par une communauté d’utilisateurs. Cette autorité vous permet de créer des certificats signés et reconnus. Le certificat racine de cacert.org est inclus dans la plupart des distributions GNU/Linux. Il n’est malheureusement pas − encore ? − inclus dans les navigateurs web classiques [1]. Du coup, c’est à vous de juger si la solution cacert est acceptable en fonction de votre public.
Générer son certificat
Supposant que vous êtes partant pour utiliser cacert, voici la procédure pour faire un certificat signé. Première chose, aller sur leur site et se faire un compte. Il faut ensuite ajouter votre domaine. Vous devez être le propriétaire du domaine. Pour vérifier cela, cacert va envoyer un mail à une des adresse mail qu’il va trouver dans le whois, ou bien par défaut à root@votredomaine.tld.
Une fois votre domaine ajouté, vous pouvez créer vos certificats :
$ openssl req -new -nodes -keyout server.key -out server.csr
Openssl va alors vous demander des informations à mettre dans votre certificat. Vous pouvez laisser les propositions par défaut car à final, seule l’adresse du site sera présente dans le certificat (cacert ne pouvant vérifier les autres). L’adresse de votre site est à mettre dans le champ suivant :
Common Name (e.g., YOUR name) []: votredomaine.tld
Une fois cela fait, vous avez deux fichiers. Un server.key (la partie privée) et un server.csr (la demande de certificat). Sur le site de cacert, dans le menu “Certificats de serveur”, cliquez sur nouveau et copier dans le formulaire le contenu de serveur.csr.
Cacert mouline un peu et vous sort alors votre certificat public. Copier coller le certificat qui s’affiche dans server.crt. Et voilà. Vous avez donc trois fichiers :
- Le server.key qui est la clé privée ;
- Le server.csr qui est le certificat de demande de signature ;
- Le server.crt qui est le certificat public, signé par cacert.
Intégration dans Apache
La config est assez simple, il suffit de dire à Apache où sont vos fichiers de certificats et d’activer SSL. Par exemple :
<VirtualHost *:443> DocumentRoot /var/www/votredomain.tld ServerName votredomaine.tld SSLEngine On SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key </VirtualHost>
Redémarrez le serveur Apache et le tour est joué.
Maintenant que vous savez à quoi ça sert, je vous souhaite de bonnes signatures.
[0] | je ne permets PAS la navigation en clair sur l’ensemble de mon site. |
[1] | du coup, les utilisateurs de Windows/MacOS ne verront pas la différence entre un certificat signé par cacert et un auto-signé. Plus d’info ici. Ubuntu ne reconnait pas cacert par défaut. Il faut simplement installer le paquet ca-certificats et tout devrait fonctionner ensuite ;) |