Génération d'un certificat Let's Encrypt avec Certbot
2019-06-06T12:20:41Z | 4 minutes de lecture | Mise à jour le 2020-03-28T19:20:00+01:00
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 :
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 :
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 :
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.
sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2
Maintenant, on va crée un fichier de configuration pour notre site en HTTPS :
sudo nano /etc/apache2/sites-available/bigboss.mgs-le-ssl.conf
Et on y insère le code suivant :
<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
)
RewriteEngine on
RewriteCond %{SERVER_NAME} =bigboss.mgs
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
Renouvellement du certificat
Manuellement
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
sudo certbot renew --dry-run --apache
Automatiquement
On ajoute le contenue suivant dans le crontab :
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.