21/11/2024

Apache

Debian Stretch : Installer un certificat Let’s Encrypt sur Apache

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 🙂 !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

4 commentaires sur “Debian Stretch : Installer un certificat Let’s Encrypt sur Apache

  • Bonjour,

    Il faut dire que ce tuto tombe bien car je suis en pleine installation dun serveur mail avec postfix

    Merci beaucoup

    Répondre
  • 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.

    Répondre
  • 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 ?

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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