Let’s Encrypt, qu’est-ce donc ?

Let’s Encrypt est une autorité de certification qui délivre des certificats X.509 afin de pouvoir utiliser le chiffrage TLS sur les sites web (via les adresses en https).

Elle a été fondé par l’EFF, la fondation Mozilla et l’Université du Michigan.

Son intérêt est qu’elle délivre gratuitement ces certificats, qu’ils sont reconnus directement par le navigateur (autorité certifiée) et que le processus d’obtention/installation de ces certificats est, en grande partie, automatisée (entièrement automatisé si exécuté directement sur le serveur. Des étapes supplémentaires sont a faire si exécuté sur un serveur différent).

Let’s Encrypt est actuellement en bêta publique depuis le 3 décembre.

Comment avoir un certificat ?

Actuellement, pour obtenir un certificat d’une autorité, il faut d’abord générer une clé publique et privé, puis générer une demande de signature. Envoyer celle-ci à une autorité de certification et après validation, celle-ci renvoi un certificat. Il faut ensuite installer ce certificat sur le serveur afin de pouvoir enfin utiliser une connexion chiffrée.

Avec Let’s Encrypt, l’obtention et l’installation des certificats se fait assez simplement. En résumé, il suffit de récupérer le client letsencrypt, disponible sur Github, et avec une seule ligne de commande, on génère (et installe si le serveur est sur la même machine) un certificat pour un ou plusieurs domaines. Pas besoin de gérer soit-même des clés/demandes, l’application fait tout automatiquement.

Obtenir le client se fait via une commande git :

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

Il suffit ensuite de lancer la commande letsencrypt-auto avec les bon paramètres pour générer/installer son certificat. Pour plus de détails, voir le manuel en ligne : https://letsencrypt.readthedocs.org/en/latest/using.html

Vous pouvez également lancer la commande suivante pour afficher toutes les commandes disponibles, une fois le client récupéré :

./letsencrypt-auto --help all

Il faut noter que, pendant la bêta publique, des restrictions sont mises en place afin de limiter les abus :

  • Limité à 10 enregistrements par IP, toutes les 3 heures.
  • Limité à 5 certificats par domaine, dans une fenêtre de 7 jours glissants.

Plus de détails sur la bêta ici : https://community.letsencrypt.org/t/beta-program-announcements/1631

Et pour les mutualisés ?

Pour ceux qui, comme moi, utilisent un hébergement mutualisé, l’obtention et installation des certificats est un peu plus complexe que de lancer une simple commande qui va automatiser le tout car le serveur n’est pas sur la même machine et vous n’avez pas forcement accès à un shell distant. Voici donc comment faire pour obtenir votre certificat et l’installer sur votre hébergement mutualisé (dans mon cas, celui-ci est géré via un cPanel).

  1. Obtenez le client letsencrypt.
  2. Allez dans le dossier letsencrypt et lancez la commande suivante (vous pouvez spécifier plusieurs domaines en spécifiant plusieurs fois l’option -d) :
    letsencrypt-auto certonly -a manual --server https://acme-v01.api.letsencrypt.org/directory -m <votre email> -d <votre domaine 1> -d <votre domaine 2> ...
  3. Let’s Encrypt vous demande ensuite de confirmer le fait que votre IP sera enregistré comme étant celle ayant demandé le certificat pour ce domaine.
    letsencrypt_valid_ip
  4. Une fois validé, le programme va vous demander de créer des fichiers à des endroits spécifiques de votre serveur.
    letsencrypt_valid_file
    Vous devrez donc créer le dossier <votre domaine>/.well-known/acme-challenge/. A l’intérieur de celui-ci, il faudra créer un fichier dont le nom et le contenu est fourni par letsencrypt (l’URL  indique le nom du fichier et la ligne en dessous le contenu de celui-ci).
    A noter que les fichiers doivent êtres délivrés par le serveur avec un Content-Type  text/plain. Pour cela, créez un fichier .htaccess dans le dossier acme-challenge et mettez ceci à l’intérieur

    DefaultType text/plain

    Pour vérifier si c’est bon, tapez l’URL du fichier demandé par letsencrypt (après l’avoir créé) dans le navigateur. Celui-ci doit afficher le contenu (et non pas vous proposer de le télécharger).

  5. Faites “Entrer” sur letsencrypt. L’étape 3/4 sera répété autant de fois que vous aurez spécifié de domaines dans la ligne de commande.
  6. Après quelques secondes, letsencrypt vous signalera que la création des certificats est terminé et qu’ils sont disponible dans le dossier /etc/letsencrypt/live/<votre domaine 1> (a noter que ce dossier contient en fait des liens symboliques, et nom pas les fichiers réels).
    letsencrypt_success
  7. Connectez-vous maintenant à votre cPanel, allez dans la partie Sécurité -> SSL/TLS et sélectionnez “Gérer les sites SSL”.
  8. Vous devez, dans cette page, spécifier le domaine auquel s’applique le certificat, votre clé privé (privkey.pem), votre certificat (cert.pem) et le certificat de l’autorité de certification (chain.pem).
  9. Une fois les infos données, validez et normalement, si tout est ok, le certificat est installé et votre domaine peut maintenant être accédé via https.
  10. Les fichiers placés dans le dossier acme-challenge peuvent également être supprimés car il ne seront plus utilisés, mais conservez le dossier car cela servira lors du renouvellement du certificat.

Pour renouveler le certificat, il suffit de relancer la même commande (avec les même domaines). Let’s Encrypt vous demandera si vous souhaitez renouveler votre certificat.

letsencrypt_renew

Après confirmation, on refait la même procédure que précédemment (à partir de l’étape 3). A noter que les certificats expirent au bout de 3 mois (90 jours). La raison de ce délai plutôt court est expliqué dans un billet du blog de Let’s Encrypt (anglais).