Debian Stretch : Installer un certificat Let’s Encrypt sur Apache
Sommaire
I. Présentation
Depuis quelques années maintenant, il est possible de bénéficier d'un certificat SSL gratuitement par l'intermédiaire de Let's Encrypt. Cette autorité de certification publie des certificats reconnus par les navigateurs. Les certificats délivrés sont valables pour une durée de 90 jours mais il est facile de mettre en place un renouvellement automatique pour éviter tout désagrément.
Dans ce tutoriel, nous allons effectuer une demande de certificat Let's Encrypt et l'intégrer sur un site sous Apache, le tout sous Debian. On s'appuiera sur l'outil certbot.
II. Installation des dépendances et de certbot
Commencez par installer des dépendances sur votre serveur :
sudo apt-get update sudo apt-get install software-properties-common
Pour l'installation du paquet "python-certbot-apache", on va aller piocher dans les paquets backports de Debian Stretch. Ceci nous permettra d'avoir une version encore plus récente du paquet. J'ai utilisé cette méthode pour l'installation car sinon j'obtenais une erreur de Python lors de l'utilisation de certbot.
Cette méthode implique d'ajouter une source de paquets supplémentaire :
sudo vim /etc/apt/sources.list
Intégrez cette ligne au fichier sources.list :
deb http://ftp.debian.org/debian stretch-backports main
On va procéder à l'actualisation des paquets et à l'installation du paquet python-certbot-apache à partir du dépôt que l'on a renseigné précédemment. Voici la commande à utiliser :
sudo apt-get update sudo apt-get install python-certbot-apache -t stretch-backports
III. Demander un certificat avec certbot
Lorsque l'installation sera terminée, nous allons utiliser Certbot pour effectuer une demande de certificat.
Un challenge se déclenche pendant la demande de certificat pour vérifier que la demande est valide et le site web bien disponible sur Internet. Pour que certbot utilise son propre serveur web intégré, on va utiliser l'option "--standalone". On va ensuite lui indiquer, via l'option "--preferred-challenges", de faire son challenge sur le port 80 avec la valeur http ou 443 pour HTTPS avec la valeur tls-sni. Enfin, on va devoir préciser le domaine pour lequel on effectue la demande de certificat, ceci s'effectue via l'option "-d".
Voici un exemple de commande pour le domaine "www.it-connect.fr" :
sudo certbot certonly --standalone --preferred-challenges http -d www.it-connect.fr
Pendant le processus de demande de certificat, vous devrez indiquer une adresse e-mail. Celle-ci est notamment utilisée pour vous avertir lorsque le certificat arrive bientôt à expiration.
Maintenant, on a en notre possession les fichiers nécessaires à la mise en place du certificat SSL. Ces fichiers se situent à l'emplacement suivant : /etc/letsencrypt/live/<votre-domaine>/
Vous y trouverez trois fichiers : cert.pem, privkey.pem et chain.pem.
IV. Configurer le vhost d'Apache
Il faut que l'on adapte notre VirtualHost Apache du site SSL pour intégrer le chargement des fichiers du certificat. Il est nécessaire d'utiliser cinq options différentes, comme on le ferait avec tout certificat SSL.
Voici les lignes à intégrer au vHost (adaptez le chemin selon votre domaine) :
SSLEngine on SSLProtocol all -SSLv2 SSLCertificateFile /etc/letsencrypt/live/www.it-connect.fr/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.it-connect.fr/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.it-connect.fr/chain.pem
Enregistrez la configuration.
Activez le module SSL sur Apache avec la commande suivante :
sudo a2enmod ssl
Enfin, si besoin, activez votre site Apache SSL. Par exemple, si le fichier de configuration du vHost se nomme "www.it-connect.fr.conf" :
sudo a2ensite www.it-connect.fr.conf
Pour passer en production cette nouvelle configuration, nous allons recharger Apache :
sudo systemctl reload apache2
Pour terminer, nous allons automatiser le renouvellement du certificat avec un script en tâche planifiée.
V. Renouvellement via certbot
On va créer un fichier sh contenant notre script :
nano /usr/bin/certbot-renew.sh
Comme il s'agit d'un script, le fichier doit être exécutable, on ajoute ce droit :
chmod +x /usr/bin/certbot-renew.sh
Enfin, voici le contenu du script qui va simplement exécuter le binaire certbot avec l'option renew. Un fichier de log sera généré au chemin /var/log/certbot-renew.log".
#!/bin/bash cd /usr/bin ./certbot renew >> /var/log/certbot-renew.log service apache2 reload exit 0
Pour lancer automatiquement le script, on va éditer la crontab (gestion des tâches planifiées) :
crontab -e
L'exemple ci-dessous permet d'exécuter l'action de renouvellement tous les jours à 05 heures du matin. Le certificat sera renouvelé si nécessaire et non tous les jours.
Ce qui donne :
0 5 * * * /usr/bin/certbot-renew.sh
Il ne reste plus qu'à enregistrer la crontab.
De manière totalement gratuite, vous venez d'ajouter un certificat SSL à votre site Internet grâce à Let's Encrypt 🙂 !
Bonjour,
Il faut dire que ce tuto tombe bien car je suis en pleine installation dun serveur mail avec postfix
Merci beaucoup
Bonjour,
Il est a priori inutile de créer manuellement la tâche cron de renouvellement. Celle-ci est créée automatiquement par l’installation du paquet.
Bonjour,
merci pour ce tuto.
Lors de la demande du certificat, aucun message d’erreur n’est apparu, tout semble avoir fonctionné. Mais le dossier LIVE et les fichiers devant s’y trouver n’ont pas été créés dans etc/letsencrypt…
La demande a été faite pour un sous-domaine qui est redirigé vers l’ip d’un VPS. J’ai donc tapé la commande suivante : sudo certbot certonly –standalone –preferred-challenges http -d http://www.monsousdomaine.mondomaine.fr
Un avis sur le pourquoi de l’inexistence des certificats ?
je n’ai pas fait attention avant de publier mon commentaire…
La commande était sudo certbot certonly –standalone –preferred-challenges http -d http://www.monsousdomaine.mondomaine.fr, sans le http://