Let’s Encrypt et Apache

Let’s Encrypt est une autorité de certification lancée en décembre 2015 qui fournit des certificats gratuits. Il a l’avantage de fournir un processus qui permet d’automatiser l’installation du certificat.

Grafikart a créé un tutoriel vidéo pour la mise en place d’un certificat SSL sur Apache, ce tutoriel est très bien pour la mise en place de Let’s Encrypt et des certificats mais le script de renouvellement n’a pas fonctionné dans notre configuration sous debian 8 + apache2 : Mettre en place un serveur Web : Apache, Let’s Encrypt

Résumé de l’installation de Let’s Encrypt et mise en place des certificats

Pour plus d’infos (installation de dépendances, …) n’hésitez pas à consulter l’article de Grafikart.

On installe Let’s Encrypt avec les droits administrateur :

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1

Voilà pour l’installation de Let’s Encrypt. L’outil se chargera par la suite d’installer les dépendances lors de son utilisation.

À noter que la version 2.7.9 de Python est requise (c’est la version présente dans Debian 8).

Passons à la mise en place des certificats. Deux solutions :

  1. Soit vous souhaitez mettre en https tous les noms de domaines configurés avec un virtual host
  2. Soit vous préférez mettre en https que certains noms de domaines pointant sur votre serveur

Pour le cas 1, utilisez la commande suivante :

/opt/letsencrypt/letsencrypt-auto

Pour le cas 2, utilisez la commande suivante :

/opt/letsencrypt/letsencrypt-auto --apache -d mondomaine.fr -d www.mondomaine.fr

En remplaçant bien sûr mondomaine.fr et www.mondomaine.fr par votre nom de domaine.

Le script va vous demander des infos :

. Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to cancel): il faut rentrer l’adresse mail sur laquelle vous souhaitez être prévenu de l’expiration du certificat

Please read the Terms of Service at : répondre A pour Agree

Would you be willing to share your email address with the Electronic Frontier Foundation… : Yes ou No (à vous de voir si vous voulez partager votre adresse mail sur leur liste de diffusion) 

Please choose whether HTTPS access is required or optional.
——————————————————————————-
1: Easy – Allow both HTTP and HTTPS access to these sites
2: Secure – Make all requests redirect to secure HTTPS access

Option 1 : vous acceptez de pouvoir accéder à votre nom de domaine à la fois en HTTP ou HTTPS
Option 2 : votre nom de domaine est automatiquement redirigé vers le HTTPS même si vous cherchez à y accéder en HTTP

Si tout s’est bien passé, un nouveau virtual host a été créé dans sites-available avec votredomaine-le-ssl.conf.

Renouvellement automatique du certificat ssl

Un certificat généré par Let’s Encrypt est valide pendant 90 jours. Il faut donc le renouveler tous les 3 mois. Il existe pour cela des scripts qu’on peut ajouter à nos tâches cron.

Pour le renouvellement ça se complique un peu, Let’s Encrypt permet de le faire très bien via la commande :

/opt/letsencrypt/letsencrypt-auto --apache --renew-by-default  -d mondomaine.fr -d www.mondomaine.fr

mais l’objectif n’est pas de renouveler le certificat tous les jours via un cron mais bien de le renouveler lorsque la date d’expiration est inférieure à 45 jours par exemple. Le script proposé par Grafikart disponible sur GitHub, et écrit par Erika Heidi n’est pas compatible avec notre installation debian 8 + apache2 + letsencrypt. Dans notre cas, nous avons dû apporter une petite modification. Voici notre script disponible ici. Pour l’utiliser il faut se mettre avec les droits administrateurs puis le télécharger comme suit :

curl -o /usr/local/sbin/le-renew-maison http://www.sois-net.fr/wp-content/uploads/2016/07/le-renew-maison.txt

Le rendre exécutable :

chmod +x /usr/local/sbin/le-renew-maison

Et enfin le lancer via :

/usr/local/sbin/le-renew-maison domaine.fr

Où domaine.fr correspond à votre nom de domaine. Attention, si vous avez un certificat pour mondomaine.com et un pour www.mondomaine.com, pensez à lancer 2 fois la commande : une fois avec en argument mondomaine.com et une fois en argument www.mondomaine.com. Il est important de mettre le chemin complet vers le script pour le lancer depuis crontab.

Ce script vérifie, pour le nom de domaine passer en paramètres, le délai avant expiration. Si celui-ci est inférieur à 45 jours, il renouvelle le certificat. Dans le cas contraire, il ne fait rien.

Maintenant, libre à vous de mettre en tâches cron, sur la fréquence que vous souhaitez, le lancement de ce script.

Petite astuce : Si on lance via le terminal la commande de let’s encrypt pour le renouvellement de certificat comme ceci :

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --domains monDomaine.com

cela crée un fichier certbot.log dans le répertoire courant. Jusque là pas de souci, mais si par mégarde vous lancez cette commande dans le dossier /etc/apache2/sites-available et que vous essayez de relancer le commande :

/opt/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default --domains monDomaine.com

Vous obtiendrez une erreur bizarre car cette commande lit le contenu du dossier /etc/apache2/sites-available et rencontrera le fichier certbot.log que la commande n’arrivera pas à parser correctement. Il suffit dans ce cas de déplacer le certbot.log ou de le supprimer et tout rentrera dans l’ordre.

Source :

Auteurs : Matthieu et Julien

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.