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
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.frDocumentRoot /CHEMIN/WEB
ServerAdmin EMAIL
ServerName elauhel.fr
ServerAlias www.elauhel.frSSLEngine On
SSLCertificateFile /etc/letsencrypt/live/elauhel.fr/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/elauhel.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/elauhel.fr/chain.pemDocumentRoot /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.