Génération d'un certificat Let's Encrypt avec Certbot

Sommaire

Ce tutoriel vous permettra (j’espère) de générer un certificat SSL gratuit chez Let’s Encrypt pour un serveur à la maison (derrière une Box). Il peut aussi servir pour un serveur en ligne (VPS par exemple).

Prérequis

  • Serveur Web ༼⁰o⁰;༽
  • Nom de domaine
    Un nom issue d’un reverse DNS comme avec No-IP fera l’affaire
  • Box internet où on connait la passphrase d’administration (je sais, j’en demande beaucoup…)

Configuration de la Box

Vous l’aurez compris, si votre serveur n’est pas derrière une Box internet (chez vous par exemple), vous pouvez passer cette étape.

L’utilitaire “certbot” a besoin d’accéder aux ports 80 et 443 de votre serveur. Pour cela vous devez alors rediriger ces ports vers votre serveur sur votre Box Internet (en TCP seulement). Si vous ne savez pas le faire (ce qui est normalement peu probable si vous suivez ce tutoriel), je vous invite à fouiller sur l’interface Web de votre Box ou de chercher la procédure dans le cyberespace.

Certbot

Installation

On va le faire en suivant les recommandations de la documentation officiel .

Avec les commandes ci-dessous, on va ajouter le dépot et installé les composants de certbot :

1
2
3
4
5
6
7
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install certbot python-certbot-apache
sudo certbot --version #pour tester

Demande de certificat

La demande se fait via une commande de ce type :

1
sudo certbot certonly --webroot --webroot-path /var/www/domaine.tld/ --domain domaine.tld --domaine www.domaine.tld --email mon@email.com

Pour comprendre, voici des paramètres d’exemple :

  • Mon répertoire Web est situé dans le dossier : /var/www/html
  • Mon nom de domaine est le suivant : bigboss.mgs
    Il est aussi accessible en : www.bigboss.mgs
  • Mon adresse e-mail est : azerty@bigboss.mgs

Avec ces paramètres je ferais donc ce la manière suivante :

1
sudo certbot certonly --webroot --webroot-path /var/www/html/ --domain bigboss.mgs --domaine www.bigboss.mgs --email azerty@bigboss.mgs

Si vous n’avez qu’un seul nom de domaine vous pouvez enlever une des directive “–domain”.

Si tous ce passe bien votre certificat ainsi que votre couple de clés (privée et public) se trouve dans le repertoire portant votre nom de domaine dans le dossier /etc/letsencrypt/live/.

À partir d’ici, vous pouvez couper les redirections de port si elles sont inutiles pour vous. Notez qu’il faut les réactiver quand vous allez renouveler votre certificat (un certificat Let’s Encrypt est valable 3 mois).

Installation du certificat

Serveur Apache

Configuration

Vous aurez besoins d’activer le module “SSL” ainsi que le module “rewrite” si vous souhaitez rediriger automatiquement le HTTP vers HTTPS.

1
2
3
sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2

Maintenant, on va crée un fichier de configuration pour notre site en HTTPS :

1
sudo nano /etc/apache2/sites-available/bigboss.mgs-le-ssl.conf

Et on y insère le code suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin azerty@bigboss.mgs
                ServerName bigboss.mgs
                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLCertificateFile /etc/letsencrypt/live/bigboss.mgs/fullchain.pem
                SSLCertificateKeyFile /etc/letsencrypt/live/bigboss.mgs/privkey.pem
                Include /etc/letsencrypt/options-ssl-apache.conf
        </VirtualHost>
</IfModule>

On active ensuite cette nouvelle configuration avec un sudo a2ensite bigboss.mgs-le-ssl (nom du fichier de configuration sans son extension) et on recharge apache avec sudo systemctl reload apache2.

Normalement, votre site est maintenant accessible en HTTPS !

Redirection de HTTP vers HTTPS

Pour cette partie, on ajoute simplement les 3 lignes suivantes dans la configuration du VirtualHost écoutant sur le port 80
( dans mon exemple, le fichier /etc/apache2/sites-available/bigboss.mgs.conf)

1
2
3
   RewriteEngine on
   RewriteCond %{SERVER_NAME} =bigboss.mgs
   RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Renouvellement du certificat

Manuellement

1
sudo certbot renew --apache

L’option --apache permet de gérer automatiquement le service Apache. Le processus va alors stopper Apache, renouveler le(s) certificat(s) et le démarrer.
De cette manière, l’action devient quasi-transparente.

On peut faire un test (donc sans sauvegarder les certificats) avec l’option --dry-run

1
sudo certbot renew --dry-run --apache

Automatiquement

On ajoute le contenue suivant dans le crontab :

1
0 2 1 * * /usr/local/bin/certbot renew

De cette manière, le renouvellement de certificat est invoqué tous les 1 du moi à 02h00 du matin.

Si comme moi vous galérez avec les valeurs de crontab, je vous conseille ce générateur en ligne .