Grâce à l’autorité de certification Let’s Encrypt, il est très simple de passer ses sites en HTTPS. Ce guide de survie pour Debian et Apache décrit comment utiliser le service de gestion des certificats proposés par Let’s Encrypt.
Installation de Certbot
A partir de debian 10 certbot-auto est déprécié et la méthode d’installation ci-dessous est obsolète.
wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto
Si celui-ci est installé sur le système, il faut le supprimer avant de le résinstaller.
Désormais l’installation se fait à l’aide de snapd. Sur debian rien de plus simple.
apt update
apt install snapd
Afin de s’assurer que tous les paths ont été mise à jour, redémarrer le système.
Puis installer la dernière version de snapd :
snap install core
Et enfin installer certbot.
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
Création d’un certificat
Pour garder la main sur la configuration Apache, je génère mes certificats en mode standalone.
Il est nécessaire de déclarer le domaine dans le fichier de zone et de stoper Apache avant de lancer la commande.
certbot certonly --standalone -d domain.tld --rsa-key-size 4096
Configuration Apache
Activation des modules SSL et Rewrite
# Module SSL
a2enmod ssl
# Module rewrite
a2enmod rewrite
# Redémarrer apache2
systemctl restart apache2
Exemple de configuration d’un vhost
<VirtualHost *>
DocumentRoot /var/www/domain.tld
ServerName domain.tld
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain.tld
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www/domain.tld
ServerName domain.tld
ServerAlias www.domain.tld
<Directory /var/www/domain.tld>
Options -Indexes
AllowOverride all
Order allow,deny
allow from all
</Directory>
SSLCertificateFile /etc/letsencrypt/live/domain.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
</VirtualHost>
Renouvellement
Après avoir testé plusieurs solutions, j’ai finalement opté pour la création d’un script placé dans cron.daily.
Celui-ci se contente de couper Apache (sans quoi le renouvellement ne fonctionne pas), de lancer la commande renew de certbot et enfin de relancer Apache lorsque la procédure est terminée.
vi /etc/cron.daily/certbot
#!/bin/sh
# cron script for certbot renew
systemctl stop apache2
certbot renew
systemctl start apache2
chmod 751 /etc/cron.daily/certbot
systemctl restart cron
Bien que planifié quotidiennement le renouvellement du certificat n’est fait que si celui-ci expire dans moins de 30 jours.
Révocation
La commande suivante permet de révoquer un certificat :
certbot revoke --cert-path /etc/letsencrypt/live/domaine.tld/fullchain.pem --reason unspecified
A la fin du processus certbot propose la supression du certificat. Dans le cas où l’on souhaiterait une suppression en dehors du processus de récovation, la commande est la suivante :
certbot delete --cert-name domain.tld
Lister ses certificats
certbot certificates