Identification

Apache et SSL avec Let's Encrypt

Catégorie : Auto-hébergement

Let's Encrypt est une autorité de certification, automatisée et ouverte qui fournit gratuitement des certificats SSL/TSL.

Cette recette liste les principales étapes de la mise en œuvre du protocole HTTPS dans Apache sur une Debian Jessie (v8), avec un certificat Let's Encrypt et Certbot.

Préparation

Configuration du pare feu

Pour commencer il faut vous assurer que le pare-feu de votre serveur autorise le trafic TCP sur le port 443, ce qui correspond au protocole de transport et au port par défaut pour le protocole HTTPS.

Ajout du dépot backports

Afin de faciliter la mise en œuvre et la maintenance des certificats SSL Let's Encrypt, nous allons installer le logiciel Certbot.
Comme ce logiciel se trouve dans le dépôt backports, il faut s'assurer que celui-ci est bien présent dans le fichier /etc/apt/sources.list :

# nano /etc/apt/sources.list

Si vous ne trouvez pas la ligne suivante dans votre fichier (ce qui est le cas par défaut), il suffit de l'ajouter :

deb http://ftp.debian.org/debian jessie-backports main

Assurez-vous ensuite que votre liste des paquets disponibles est bien à jour à l'aide de la commande suivante :

# apt-get update

Installation de Certbot

Certbot est un petit outil écrit en python. Il permet d'obtenir, déployer et mettre à jour les certificats SSL fournis gratuitement par Let's Encrypt. Certbot sait aussi configurer automatiquement le HTTPS dans Apache, nous allons donc l'installer.

Voici la commande permettant d'installer Certbot pour Apache sur une Debian Jessie :

# apt-get install python-certbot-apache -t jessie-backports

Création des certificats et configuration d'Apache

Pour créer vos certificats et les mettre en œuvre dans Apache, il suffit d'exécuter la commande suivante et de répondre à quelques questions :

# certbot --apache

Une fois l'opération effectuée, pensez à faire une copie de sauvegarde du répertoire /etc/letsencrypt qui contient, entre autre, l'ensemble des certificats.

Renouvellement des certificats

Les certificats Let's Encrypt ne sont valables que 90 jours, il faut donc les renouveler régulièrement. Cette opération est également réalisable à l'aide Certbot, qui offre de nombreuses possibilités détaillées dans sa documentation en ligne.

Les informations qui suivent ne sont que des aides mémoire.

Renouvellement manuel

La commande suivante permet d'effectuer la mise à jour des certificats lorsque c'est nécessaire, c'est à dire lorsqu'ils arrivent à expiration dans les 30 jours :

# certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Toutefois il est plus pratique d'automatiser le renouvellement des certificats SSL Let's Encrypt à l'aide de cron.

Renouvellement automatique

Pour effectuer une demande de renouvellement, par exemple un fois par semaine, il suffit d'ajouter un script dans /etc/cron.daily :
# nano /etc/cron.weekly/certbot-ssl-renew

Le contenu du script est le suivant :

#!/bin/sh

# Renouvellement automatique des certificats SSL Let's Encrypt

set -e

certbot renew --quiet --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Une fois le script sauvegardé n'oubliez pas de le rendre exécutable...

# chmod 0755 /etc/cron.weekly/certbot-ssl-renew

Et de recharger la configuration de cron :

# service cron reload

Voilà, votre serveur est maintenant configuré pour tenter de renouveler ses certificats Let's Encrypt automatiquement, toutes les semaines.