Temps de lecture estimé: 4 minutes
Vu que je m’y suis attelé récemment pour mon homelab VMware ESXi, je me penche maintenant sur le renouvellement automatique des certificats de mon NAS Synology.
Comme il est derrière un reverse proxy, il m’est impossible d’utiliser la fonction intégrée de renouvellement automatique des certificats par Let’s Encrypt, puisqu’elle utilise le challenge HTTP-01.
Donc, jusqu’à présent, le renouvellement automatique se faisait sur un autre serveur, et je changeais le certificat manuellement tous les 90 jours.
Dans cet article, je détaille comment j’ai mis en place le renouvellement automatique au travers du challenge DNS-01 de Let’s Encrypt.
Cet article se base sur acme.sh, sa documentation et son wiki (notamment la partie DNS OVH et la partie Synology)
Configurer les autorisations de l’API OVH
Comme je compte utiliser le challenge DNS, je dois créer une autorisation pour accéder et modifier les enregistrements DNS de mon domaine.
J’ai déjà rédigé des articles à ce sujet, notamment Comment utiliser l’API d’OVH avec Postman et Mise en place de certificat wildcard avec Letsencrypt et OVH.
Sinon, le lien est ci-dessous.
et tu obtiens ensuite ton Application Key
, ton Application Secret
et ta Consumer Key
Créer un nouvel utilisateur sur Synology DSM
Cette étape est optionnelle. Pour exécuter le script et l’isoler de mon utilisateur personnel ou de l’utilisateur admin, je crée un nouvel utilisateur sur l’interface Synology DSM.
Cet utilisateur doit avoir les droits Admin.
N’oubliez pas d’adapter les commandes suivantes avec le nom de votre utilisateur.
Installer acme.sh
À partir de là, j’ai tout ce qu’il me faut pour suivre la procédure d’installation.
Je me connecte en SSH à mon NAS et je me place dans le dossier de mon utilisateur acme.sh créé ci-dessus.
cd /volume1/homes/acme.sh/
Je récupère et j’installe acme.sh
avec
curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online --accountemail "contact@anthony-jacob.com" --nocron
et avant d’oublier, j’active l’auto update
/var/services/homes/acme.sh/.acme.sh/acme.sh --upgrade --auto-upgrade
Tester acme.sh avec le DNS challenge et l’api OVH
Maintenant que acme.sh
est installé et que j’ai récupéré plus haut mon Application Key
, mon Application Secret
et ma Consumer Key
, je vais pouvoir tester que tout fonctionne bien avant d’aller plus loin (au niveau de la documentation, c’est ici).
# application key
export OVH_AK="your application key"
# application secret
export OVH_AS="your application secret"
# consumer key
export OVH_CK="your consumer key"
/var/services/homes/acme.sh/acme.sh --issue -d sub.mydomain.com --dns dns_ovh --server letsencrypt --keylength 2048
(bien sur tu remplaces avec tes valeurs) et c’est un succès
Tester acme.sh avec le hook Synology
Ok, la génération des certificats fonctionne, maintenant comment les appliquer automatiquement à mon NAS Synology (la documentation est ici).
Après quelques tâtonnements,
export SYNO_USERNAME='Admin_Username'
export SYNO_PASSWORD='Admin_Password!123'
export SYNO_HOSTNAME="sub.mydomain.com"
export SYNO_SCHEME="https"
export SYNO_PORT="5001"
export SYNO_CERTIFICATE="test"
/var/services/homes/acme.sh/.acme.sh/acme.sh --deploy --home /var/services/homes/acme.sh/.acme.sh/ -d "sub.mydomain.com" --deploy-hook synology_dsm --debug 3
dans mon cas, j’ai d’abord eu l’erreur:
[Fri Jan 17 22:40:23 CET 2025] Unable to find certificate: anthony-jacob.com and is not set.
[Fri Jan 17 22:40:23 CET 2025] Error deploying for domain: dsm.anthony-jacob.com
[Fri Jan 17 22:40:23 CET 2025] Error encountered while deploying.
J’avais déjà un certificat existant. Je souhaite donc le remplacer. C’est pour cette raison que j’utilise SYNO_CERTIFICATE="test"
, test étant la « description » de mon certificat.
Automatiser le renouvellement du certificat
Je peux manuellement renouveler le certificat auprès de Let’s Encrypt et ensuite l’appliquer à DSM. Il ne reste plus qu’à automatiser le tout.
Il se trouve qu’acme.sh utilise lors de son exécution le fichier /var/services/homes/acme.sh/.acme.sh/account.conf
.
Il contient déjà les informations concernant le renouvellement du certificat à l’aide de l’API OVH. J’en profite pour ajouter les informations concernant le déploiement du certificat sur le NAS Synology. Mon fichier ressemble à ceci :
#LOG_FILE="/var/services/homes/acme.sh/.acme.sh/acme.sh.log"
#LOG_LEVEL=1
AUTO_UPGRADE='1'
#NO_TIMESTAMP=1
export SYNO_USERNAME='Admin_Username'
export SYNO_PASSWORD='Admin_Password!123'
export SYNO_HOSTNAME="sub.mydomain.com"
export SYNO_SCHEME="https"
export SYNO_PORT="5001"
export SYNO_CERTIFICATE="test"
ACCOUNT_EMAIL='contact@anthony-jacob.com'
UPGRADE_HASH='c872b659dd575331ef886478213e9c3db26b57dde4e8'
SAVED_OVH_AK='Application Key'
SAVED_OVH_AS='Application Secret'
SAVED_OVH_CK='Consumer Key'
USER_PATH='/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin'
Il suffit ensuite de définir une tâche planifiée sur DSM. Pour cela, on ouvre le panneau de configuration > Planificateur de tâches.
et on crée une nouvelle tâche, à exécuter dans mon cas avec mon utilisateur acme.sh.
que je vais exécuter tous les dimanches.
et pour le script, je mets les deux commandes testées ci-dessus : une pour le renouvellement et une pour le déploiement.
Pour l’instant j’ai mis --debug 3
pour vérifier l’exécution du script. Je l’ai ensuite retiré après avoir vérifié que tout fonctionnait.
Et justement, pour vérifier, j’active l’enregistrement des résultats de sortie (il semblerait que je ne puisse choisir qu’un dossier partagé, dans mon cas temp
).
Et j’exécute manuellement la tâche.
J’ai bien les logs d’exécution.
pour le renouvellement, j’ai bien:
[Sat Jan 18 09:51:42 CET 2025] Skipping. Next renewal time is: 2025-03-17T21:30:48Z
et pour le déploiement sur le NAS Synology, j’ai bien :
[Sat Jan 18 09:51:48 CET 2025] deploy/synology_dsm.sh:_logout:407 response='{"success":true}'
[Sat Jan 18 09:51:48 CET 2025] Success
Donc je crois que je peux dire que tout est en place!!
Voilà ! Si tu es arrivé jusqu’ici, j’espère que cet article t’a été utile ! N’hésite pas à me faire un retour s’il t’a aidé ou s’il y a une correction à apporter.
En attendant je te dis à bientôt pour de nouvelles aventures!!