Cette article fait suite à [certbot][bind] DNS Challenge. A la base, j’utilisai le plugin acme de Pfsense pour générer les certificats et HA proxy en tant que reverse proxy. Comme les certificats dans mon cas sont issus du DNS challenge, tous les 3 mois, il faillait refaire la manipulation.
Pour rappel, le principe est suite à la génération de nouveaux certificats avec certbot, flèches 1 à 6, les certificats sont mis à jour dans Pfsense et on relance HA proxy, flèche 7.

Ici, j’expose la manière de mettre à jour les certificats dans Pfsense de manière automatique.
Solution
Prérequis 1
Par rapport à la première étape, qui est de générer les certificats automatiquement avec le DNS challenge (cette partie doit être fonctionnelle), nous disposons des certificats dans un répertoire selon la structure de fichier suivante :
ls /etc/letsencrypt/live/integ.tk/
cert.pem
chain.pem
fullchain.pem
privkey.pem
Prerequis 2
Côté Pfsense, il faut que le nom du certificat correspond au FQDN du site, exemple, integ.tk

Intégration
Télécharger le script suivant. Son fonctionnement est similaire à ce que j’ai pu voir mais ça manquait un peu de clarté. J’ai préféré mêler le python pour traiter la partie xml et le bash pour gérer le reste.
curl https://raw.githubusercontent.com/jbsky/integ.tk/main/pfsense/update-pfsense -o /usr/local/sbin/update-pfsense
chmod +x /usr/local/sbin/update-pfsense
Dans ce script, il n’y a qu’à configurer dans ce qui est compris entre, la liste contient le nom des répertoires contenus dans /etc/letsencrypt/live/.
##################### Partie à configurer #####################
sshpass='root@192.168.0.254'
list="exemple.org another.exemple.org"
dir="/etc/letsencrypt/live"
############################# Fin #############################
Installer la bibliothèque lxml.
pip3 install lxml
Y a plus qu’à tester et si c’est fonctionnelle, faire la cron.
cron
Si votre fichier cron.d/certbot ressemble à ligne suivante.
47 6 * * * root /usr/bin/certbot renew --quiet
Editer par exemple /etc/crontab afin d’ajouter la ligne suivante, une execution 3 minutes plus tard par rapport au renouvellement des certificats.
50 6 * * * root /usr/local/sbin/pfsense-update