Depuis jeudi, le projet Let’s Encrypt est passé en bêta publique. Rappel : Let’s Encrypt se veut être une autorité de certification fournissant des certificats gratuits afin de généraliser au plus vite un Web un minimum sécurisé en HTTPS.

Ayant tenté l’expérience sans succès lors de la bêta privée, cette annonce m’a poussé à essayer de nouveau et à réussir plus ou moins à monter quelque chose.

Voici jusqu’ici comment je m’en suis sorti pour que le blog devienne accessible en HTTPS avec un certificat fourni par Let’s Encrypt.

Une partie des infos vient de la doc officielle, une autre de différents posts sur le forum et le reste de tâtonnements personnels.

1- Installation

Cloner le projet depuis le repository GitHub

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

Passer dans le répertoire créé

cd letsencrypt

Lancer l’installation

./letsencrypt-auto

2- Génération du certificat

Appeler la commande de génération de certificat

./letsencrypt-auto certonly (_verbose) _webroot -w /CHEMIN/WEB -d elauhel.fr -d www.elauhel.fr

Remarques :

  • Remplacer ‘_’ par ‘- -‘ sans espace (WTF WordPress ?!)
  • /CHEMIN/WEB correspond au chemin local vers le répertoire contenant les fichiers web du sous-domaine à configurer.
  • Ici on indique que l’on veut un certificat pour le sous-domaine www.elauhel.fr en plus de elauhel.fr car celui-ci est confondu. Pour créer un certificat pour le domaine de troisième niveau test.elauhel.fr il aurait suffit de passer uniquement le paramètre _-d test.elauhel.fr.
    _ * L’option _verbose est facultative mais elle peut permettre de révéler les erreurs de frappe et puis vu que le programme passe par virtualenv, chaque commande exécutée a tendance à prendre du temps avant de faire quoi que ce soit. Avec l’option _verbose, au moins on visualise l’activité.

Au premier lancement de la commande il faudra renseigner une adresse e-mail principale (j’attends encore le mail de confirmation…) et accepter les conditions du service.

Si tout s’est bien passé, un message informe que le certificat se trouve dans /etc/letsencrypt/live/elauhel.fr/ :

IMPORTANT NOTES:

  • Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/elauhel.fr/fullchain.pem. Your cert will
    expire on YYYY-MM-DD. To obtain a new version of the certificate in
    the future, simply run Let’s Encrypt again.
  • If like Let’s Encrypt, please consider supporting our work by…

3- Configuration d’Apache

Ouvrir en modification le fichier du vhost à configurer

nano /etc/apache2/sites-available/elauhel_fr

Et le renseigner à peu près comme ceci

<VirtualHost *:80>

ServerAdmin EMAIL
ServerName elauhel.fr
ServerAlias www.elauhel.fr

DocumentRoot /CHEMIN/WEB

ServerAdmin EMAIL
ServerName elauhel.fr
ServerAlias www.elauhel.fr

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/elauhel.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/elauhel.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/elauhel.fr/chain.pem

DocumentRoot /CHEMIN/WEB

Relancer Apache

service apache2 restart

Tenter alors de se connecter au site en HTTPS.

La particularité du projet est également de fournir des certificats à très courte durée de validité. Actuellement celle-ci est de 90 jours et une fois sorti de bêta elle devrait être de 60 jours.

Pour ne pas avoir à se prendre la tête vis à vis de cette procédure, le plus simple et c’est ce à quoi incite directement Let’s Encrypt, c’est d’automatiser celle-ci.

Renouvellement automatique

Créer un script Shell

nano /CHEMIN/VERS/​renewLetsEncrypt.sh

Lui mettre le contenu suivant

#!/bin/sh

/CHEMIN/VERS/​letsencrypt-auto _config /CHEMIN/VERS/conf/​myConfElauhel.ini -d elauhel.fr -d www.elauhel.fr certonly && service apache2 reload

(Remplacer ‘_’ par ‘- -‘ sans espace)

Créer le fichier de configuration

nano /CHEMIN/VERS/conf/​myConfElauhel.ini

Le renseigner de la sorte

authenticator = webroot
webroot-path = /CHEMIN/WEB
renew-by-default
agree-tos
email = MAIL

Il ne reste plus qu’à éditer Crontab

crontab -e

Et lui ajouter la ligne suivante pour appeler le script le cinq de chaque mois à 2h du matin

0 2 5 * * /CHEMIN/VERS/​renewLetsEncrypt.sh » /tmp/renew.log

Dans le cas où il y aurait plusieurs certificats à renouveler sur un même serveur et pour éviter l’erreur Error: rateLimited :: There were too many requests of a given type :: Error creating new registration :: Too many registrations from this IP, il est préférable de ne renouveler qu’un certificat par jour.

Il suffit alors de créer un script Shell et un fichier de configuration par certificat, et d’ajouter une ligne dans Crontab avec à chaque fois un jour du mois (le troisième paramètre) différent.