---
title: "Générer et mettre à jour automatiquement un certificat \"wildcard\" let's encrypt."
summary: "brief decription to sum up"
author:
  - JF
date: 2019-12-16
---
# Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.

## Installation de acme.sh
```bash
# 1 - Being root

SYNOPATH="/volume1/something"
cd $SYNOPATH

git clone https://github.com/acmesh-official/acme.sh.git

./acme.sh/acme.sh --install --nocron --home $SYNOPATH/acme.sh/.acme.sh --accountemail "admin@savaneprod.fr"
```


Sur DSM, les certificats se trouvent dans `/usr/syno/etc/certificate/_archive/`.

## Mise à jour automatique du certificat
Le script fonctionne aussi pour une création de certificat avec l'ajout dans le Synology.

### Chez Gandi 

Utilsation de l'API Gandi : [https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api](https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api)

### Le script de mise à jour

```bash
SYNOPATH="/volume1/something"
API="dns_gandi_livedns"
ACME_SH_PATH="$SYNOPATH/Certificats/acme.sh/acme.sh"

jour=$(date +%Y-%m-%d)
file='$SYNOPATH/Certificats/'$jour'.log'

HOME_orig=$HOME
HOME="$SYNOPATH/Certificats/.acme.sh"

DOMAIN='savaneprod.fr'
SUBJECT_ALTERNATIVE_NAME='*.savaneprod.fr'

export GANDI_LIVEDNS_KEY="la clef récupérée chez Gandi"

export SYNO_Certificate="savaneprod.fr cert"
# Creates the cert in DSM if it does not exist in Security/Certificate management.
export SYNO_Create=1
# When run locally, use an automatically created temp admin. Deletes it after use.
# https://github.com/acmesh-official/acme.sh/wiki/deployhooks#20-deploy-the-certificate-to-synology-dsm
export SYNO_USE_TEMP_ADMIN=1

echo "*********************************************" 2>&1 | tee -a $file
echo "  Mise à jour du certificat $DOMAIN" 2>&1 | tee -a $file
echo "*********************************************" 2>&1 | tee -a $file

#Lors d'une première utilisation:
##  Il est nécessaire de --issue et de passer SYNO_Create à 1.
##  Décommenter la ligne suivante et commenter la ligne d'après.
#bash $ACME_SH_PATH --home $HOME --issue -d $DOMAIN -d $SUBJECT_ALTERNATIVE_NAME --server letsencrypt --dns dns_infomaniak --force
bash $ACME_SH_PATH --home $HOME --renew -d $DOMAIN -d $SUBJECT_ALTERNATIVE_NAME --server letsencrypt --dns dns_infomaniak --force --log 2>&1 | tee -a $file
bash $ACME_SH_PATH --home $HOME -d $DOMAIN -d $SUBJECT_ALTERNATIVE_NAME --deploy --deploy-hook synology_dsm --log 2>&1 | tee -a $file

echo "---------------------------------" 2>&1 | tee -a $file
echo "  Fin du script de mise à jour." 2>&1 | tee -a $file
echo "*********************************" 2>&1 | tee -a $file
```
### Chez infomaniak 

* Utilisation de l'API infomaniak : [https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_infomaniak](https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_infomaniak)
* Création d'un token d'API pour la gestion des entrées DNS :
Depuis la page d'accueil. Aller dans "Utilisateur et profil", "Mon profil", "Développeur" et "Tokens API".

![Création d'un token d'API pour gérer les entrées DNS](infomaniak_API_token.png)
* On peut alors modifier le script avec les valeurs suivantes :
```bash
API="dns_infomaniak_add"
export INFOMANIAK_API_TOKEN="mon_t0k3n_9uil_e2t_grand_et_b1en_utile"
```
Il faut le sauvegarder en lieu sûr, car une fois créé il ne sera plus possible de le consulter.

### La conf dans DSM dans le planificateur de tâches

![Planificateur de tâche, onglet "General"](task_general-tab.png)

J'ai finalement décidé de renouveler tous les mois parce que le Synology propose tous les 3 mois mais la durée de vie du certificat est légèrement inférieure. Et je n'ai pas cherché à configurer le renouvellement tous les deux mois.
![Planificateur de tâches, onglet "Schedule"](task_Schedule-tab.png)

Exécution du script. Il faut bien entendu que le script ait la permission d'éxécution configurée.
![Planificateur de tâches, onglet "Task Settings"](task_setting-tab.png)

