lundi 1 février 2016

Quand les certificats deviennent gratuits

Bonjour,

J'ai découvert, il y a quelque temps de cela, un article concernant Let's Encrypt. Ce projet open source est très intéressant, car il va certainement changer la donne dans le monde des certificats du Web. D'ailleurs de très gros acteurs de la toile sont partenaire du projet. Bien qu'opérationnel, à l'heure ou j'écris ces lignes, le projet est encore en phase beta. Google est bien resté en phase bêta pendant plusieurs années...
Pour ma part, je l'utilise en production.

Beaucoup d'hébergeur, vont, par l’intermédiaire de Let's Encrypt, fournir des certificats pour leurs sites hébergés. Maintenant, si vous possédez un serveur dédié ou virtuel, il va falloir le mettre en place vous même.

Je profite de ma récente mise en place de Let's Encrypt, pour vous expliquer son installation. Vous verrez, c'est d'une simplicité enfantine, surtout si vous possédez un système à jour !

Je ne vous parlerais pas de l’intérêt des certificats. Un petit cadenas vert sur certains sites, Edward Snowden, les dernières recommandations de Google pour l'indexation des sites HTTPS. Tout ces termes devraient vous mettre la puce à l'oreille, même si vous suivez l'actualité de très très loin.

Tout d'abord, Let's Encrypt sert à 2 choses. La première consiste à générer gratuitement des certificats SSL/TLS et la seconde, à les renouveler. Vous pourrez également gérer les révocations des certificats.

Pour information, Let's Encrypt est codé en Python. Actuellement, il n'existe pas de package .RPM ou .DEB. Donc, il va falloir récupérer le code directement depuis Github avec GIT.
Le package est accessible via RPM dans le dépot EPEL ou sinon vous pouvez le récupérer via GIT.

Installation via RPM : il vous suffit de taper yum install letsencrypt

Installation via GIT : Connectez-vous en root sur votre serveur. Si vous n'avez pas GIT, installez-le (ex: yum install git ou apt-get install git), puis récupérer le projet sur votre machine et déposez-le dans un espace à part (ex: /opt/letsencrypt) en faisant :

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Avant de poursuivre, assurez-vous d'avoir autorisé l'accès aux dépôts EPEL pour certains éléments non disponible dans les dépôts de base. Assurez vous, d'ouvrir les ports 80 et 443 sur votre serveur. Une fois le code Let's Encrypt récupéré, il vous suffit de vous rendre dans le dossier ou vous l'avez déposé (ex: cd /opt/letsencrypt), puis de tapez la commande :

./letsencrypt-auto --help all

Cette commande va s'assurer que toutes les dépendances sont en place et le cas échéant, vous les installer. Bien entendu, si vous refuser l'installation des dépendances, ne vous attendez pas à ce le programme fonctionne.
Une fois Let's Encrypt correctement installé. Il vous suffira de taper une simple commande pour générer vos certificats :

./letsencrypt-auto --apache -d toto.com

Même si pour le moment Let's Encrypt ne peut générer de certificats génériques ou wilcard certificates (*), il peut très bien générer autant de domaines connexes que vous le souhaitez.
Exemple : ./letsencrypt--auto --apache -d toto.com -d histoire.toto.com -d ftp.toto.com

Maintenant Let's Encrypt peut générer des certificats génériques (*) lire ceci.

Comme vous l'aurez remarqué, la commande comporte l'option --apache. Eh oui, Let's Encrypt possède un système de plugins qui vous permet de choisir le serveur dans lequel il va installer les éléments de configuration. Il possède également les plugins nginx, standalone, webroot et manual.
Je vous invite à consulter la documentation pour leurs manipulations respectives.
Les différents domaines et sous domaines passés en paramètres peuvent être séparés par une virgule, 
Exemple : -d toto.com,www.toto.com,ftp.toto.com,tralala.toto.com.

Pendant la génération du certificat, votre e-mail vous sera demandé. Cela servira à vous prévenir de l'expiration de vos certificats. Les certificats Let's Encrypt sont valable 90 jours.
Vous verrez également apparaître, en fonction du nombre de domaine et sous-domaine à générer un sélecteur de fichier de Let's Encrypt vous stipulant de sélectionner le fichier de configuration ou les modifications concernant le domaine à traiter devront avoir lieu.

Pour ma part, j'ai du remettre un peu d'ordre dans mes fichiers de configurations Apache après le passage de Let's Encrypt. Cependant pas d'inquiétude, même si vous n'aviez pas pris la précaution de faire une sauvegarde avant, l'outils le fait et le stocke dans un dossier de backup (ex: /var/lib/letsencrypt/backups/<serial>/ssl.conf)

Pensez à vérifier votre configuration avant de redémarrer votre serveur web.
pour apache : apache2 -t ou apachectl configtest
pour nginx : nginx -t

Une fois relancé, vérifiez vos nouveaux certificats avec https://www.ssllabs.com/ssltest/

Donc, si vous avez bien lu l'article, vous savez que vous allez devoir certifier à nouveau vos domaines tout les 90 jours au max. Le mieux serait juste avant. Pour cela une simple commande suffit :

./letsencrypt--auto certonly --apache --renew-by-default -d toto.com,histoire.toto.com,ftp.toto.com


/!\ Par instinct, je n'ai pas mélangé les domaines lors de création ou du renouvellement. Cependant Let's Encrypt gère correctement les domaines en les séparant automatiquement.

Si avez besoin de plus d'informations, la documentation officielle, c'est par ici Documentation

Et pour Windows, me diront certains ?! Je serais tenté de leur répondre ; "je n'ai pas essayé de le mettre en oeuvre et apparemment ce n'est pas gagné".

Je vous invite également à lire cette excellente critique.