Pour beaucoup d’entre nous, Let’s Encrypt a révolutionné l’hébergement de sites sécurisés depuis la sortie de sa première version bêta fin 2015. Mon précédent article sur Certbot et Let’s Encrypt fournit un petit script shell très rudimentaire à la fin pour faciliter la génération et le renouvellement automatique des certificats.
Voici une mouture plus évoluée de ce script, nommée letsencrypt.sh
. Si vous gérez un certain nombre d’hébergements sécurisés sur un seul serveur dédié, ce script vous facilitera la vie.
Pour expliquer le fonctionnement du script, je vais tout simplement le montrer en action sur une des machines que je gère. Pour commencer, je récupère le script depuis mon dépôt Gitlab.
$ git clone https://gitlab.com/kikinovak/centos.git
Le répertoire el7/certbot
contient le script letsencrypt.sh
et un fichier README
.
$ ls centos/el7/certbot/ letsencrypt.sh README.md
Je copie le script vers un endroit approprié.
$ cp centos/el7/certbot/letsencrypt.sh ~/bin/
Je me place dans le répertoire ~/bin
et je définis les permissions qui vont bien.
$ cd ~/bin $ chmod 0700 letsencrypt.sh
J’ouvre le script et j’édite d’abord quelques variables pour les adapter à ma configuration, en l’occurrence EMAIL
et WEBROOT
.
# Edit these variables according to your local configuration.
EMAIL='info@microlinux.fr'
CERTBOT='/usr/bin/certbot'
CERTGROUP='certs'
CERTGROUP_GID='240'
WEBSERVER='Apache'
WEBSERVER_DAEMON='httpd'
WEBROOT='/var/www'
Ensuite, j’édite la liste des domaines hébergés (DOMAIN[x]
) et des répertoires correspondants par rapport à la racine du serveur web (WEBDIR[x]
).
# Edit hosted domains and their corresponding directories under the web root.
DOMAIN[1]='sd-131691.dedibox.fr'
WEBDIR[1]='default'
DOMAIN[2]='bsco.io'
WEBDIR[2]='bsco-redirect'
DOMAIN[3]='www.bsco.io'
WEBDIR[3]='bsco-redirect'
DOMAIN[4]='accounting.bsco.io'
WEBDIR[4]='bsco-dolibarr'
DOMAIN[5]='cloud.bsco.io'
WEBDIR[5]='bsco-owncloud'
DOMAIN[6]='contact.bsco.io'
WEBDIR[6]='bsco-contact'
DOMAIN[7]='crypt.bsco.io'
WEBDIR[7]='bsco-crypt'
DOMAIN[8]='secrets-of-learning.com'
WEBDIR[8]='secrets-redirect'
DOMAIN[9]='www.secrets-of-learning.com'
WEBDIR[9]='secrets-redirect'
DOMAIN[9]='fr.secrets-of-learning.com'
WEBDIR[9]='secrets-fr-wordpress'
DOMAIN[10]='poc.secrets-of-learning.com'
WEBDIR[10]='secrets-poc-wordpress'
DOMAIN[11]='mail.secrets-of-learning.com'
WEBDIR[11]='secrets-roundcube'
Le script est censé être exécuté avec les droits d’administrateur.
$ ./letsencrypt.sh Please run with sudo or as root.
Invoqué sans autre option, il affiche une aide succincte.
$ sudo ./letsencrypt.sh Usage: ./letsencrypt.sh OPTION Create or renew an SSL/TLS certificate. Options: -h, --help Show this message. -t, --test Perform a dry run. -c, --cert Create/renew a certificate.
L’option --test
me permet de tester la génération (ou le renouvellement) du certificat.
$ sudo ./letsencrypt.sh --test Performing a dry run. Stopping the Apache web server. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Obtaining a new certificate Performing the following challenges: http-01 challenge for accounting.bsco.io http-01 challenge for bsco.io http-01 challenge for cloud.bsco.io http-01 challenge for contact.bsco.io http-01 challenge for crypt.bsco.io http-01 challenge for fr.secrets-of-learning.com http-01 challenge for mail.secrets-of-learning.com http-01 challenge for poc.secrets-of-learning.com http-01 challenge for sd-131691.dedibox.fr http-01 challenge for secrets-of-learning.com http-01 challenge for www.bsco.io Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - The dry run was successful.
À partir de là, il ne me reste plus qu’à invoquer le script avec l’option --cert
.
$ sudo ./letsencrypt.sh --cert Stopping the Apache web server. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator standalone, Installer None Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org Obtaining a new certificate Performing the following challenges: http-01 challenge for accounting.bsco.io http-01 challenge for bsco.io http-01 challenge for cloud.bsco.io http-01 challenge for contact.bsco.io http-01 challenge for crypt.bsco.io http-01 challenge for fr.secrets-of-learning.com http-01 challenge for mail.secrets-of-learning.com http-01 challenge for poc.secrets-of-learning.com http-01 challenge for sd-131691.dedibox.fr http-01 challenge for secrets-of-learning.com http-01 challenge for www.bsco.io Waiting for verification... Cleaning up challenges ... Starting the Apache web server.
Pour le renouvellement automatique des certificats tous les débuts de mois, il suffit d’ajouter une ligne correspondante dans les tâches automatiques du système.
$ sudo crontab -l
# Renew SSL certificate every first day of the month at 0:00
00 00 1 * * /home/microlinux/bin/letsencrypt.sh --cert
Voici le listing complet du script. Si vous avez des suggestions pour l’améliorer, n’hésitez pas à laisser un commentaire.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
2 commentaires
remy · 16 avril 2020 à 15 h 30 min
Bonjour,
Les grands esprits se rencontrent (ou plutôt les mêmes besoins 😉 )
J’ai un script similaire ici : https://gist.github.com/remyd1/35fdbcb740fa4fdec1a15727ad7e743c
Il s’appelle aussi letsencrypt.sh. Voici comment je l’utilise (1ère partie de l’article) :
https://cbi.mbb.cnrs.fr/remydernat/https_mgmt.html
Je pense qu’il y aurait sûrement moyen de fusionner les 2 scripts pour les améliorer.
a+
Rémy.
kikinovak · 16 avril 2020 à 15 h 57 min
Effectivement. Mais ton script a l’air plus élaboré et un peu mieux fichu. Le mien est somme toute assez rudimentaire… mais fait très bien l’affaire. Comme quoi différents chemins mènent à Saint-Bauzille-de-Putois. :o)
Les commentaires sont fermés.