le-meilleur-tuto-pour-la-creationd-un-certificat-wildcard-sur-synology
Informatique, Techno, Web & Apps

Le meilleur tuto pour la création d’un certificat Wildcard sur Synology

J’ai passé des heures à chercher en vain une solution à mon problème de certificat Wildcard avec mon NAS Synology. En effet, j’étais exigent (comme toujours), je souhaite créer et surtout renouveler automatiquement mon certificat Wildcard. Ca c’est plutôt «simple», mais je souhaitai également automatiser la création des enregistrements DNS sur mon domaine OVH. Bref ne plus avoir rien à faire !

Pour créer mon certificat, j’utilisai jusqu’à maintenant le service «SSL for Free». Sauf que depuis mai 2020, ce service n’est plus gratuit pour les certificats «Wildcard». Je ne souhaitai pas payer pour récupérer un certificat qui est à la base fourni gratuitement par Let’s Encrypt.

En toute modestie, je vous annonce que ce tutoriel va vous permettre de gagner de précieuses heures. Bon OK en période de confinement ou de couvre-feu ça n’a plus trop de sens… mais c’est toujours ça de prit !

Néanmoins, je n’ai rien inventé et je me suis inspiré de plusieurs autres tutoriaux (notamment celui d’Oracle7 du site très bon site nas-forum.com) pour arriver à quelque chose de simple et qui je pense pourra convenir à d’autres. J’ai simplement synthétisé son tutoriel pour ne garder que l’essentiel selon moi.

Préambule

En préambule, ce tutoriel va vous permettre de générer votre certificat Wildcard sans avoir à ouvrir et exposer à Internet les ports 80 et 443.

L’alternative qui sera utilisée ici, c’est l’utilisation de la méthode par validation dite par DNS basée sur le protocole «DNS-01». Avec cette méthode, plus besoin d’ouvrir ses ports, par contre, vous devez disposer de l’accès à la zone DNS du domaine pour lequel vous souhaitez créer le certificat.

Nous allons ici utiliser la méthode avec le fournisseur OVH, mais vous pouvez très bien l’utiliser et l’adapter avec d’autres fournisseurs. Vous trouverez ici la liste des fournisseurs pris en charge. Les paramètres diffèrent, mais le principe reste le même.

Installation du script «acme.sh»

Pendant toute la durée de la procédure, vous devez rester connecté sur la même session SSH. Attention donc à ne pas la déconnectée et à ne pas subir un timeout.

L’installation du script shell «acme.sh» doit se faire dans un répertoire qui n’est pas impacté lors des mises à jour de DSM. Nous allons donc créer un répertoire spécifique qui ne sera pas impacté.

cd /volume1
mkdir -p Certificats/Acme_install
cd Certificats/Acme_install

Ensuite nous allons télécharger l’archive «master.tar.gz» d’acme.sh sur le GitHub:

wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz

On décompresse l’archive téléchargée et on se place dans le répertoire décompressé:

tar xvf master.tar.gz
cd acme.sh-master

On lance ensuite l’installation du script en ajoutant au passage votre adresse email. Nous spécifierons la variable «CERT_HOME» qui correspond au répertoire où seront générés les fichiers du certificat :

ACME_HOME="/usr/local/share/acme.sh"
CERT_HOME="/volume1/Certificats
./acme.sh --install --nocron --home "$ACME_HOME" --cert-home "$CERT_HOME" --accountemail "email@gmail.com"

Vous devriez avoir un réponse de ce type :

[Wed Feb  3 08:15:35 CET 2021] It is recommended to install socat first.
[Wed Feb  3 08:15:35 CET 2021] We use socat for standalone server if you use standalone mode.
[Wed Feb  3 08:15:35 CET 2021] If you don't use standalone mode, just ignore this warning.
[Wed Feb  3 08:15:35 CET 2021] Installing to /usr/local/share/acme.sh
[Wed Feb  3 08:15:35 CET 2021] Installed to /usr/local/share/acme.sh/acme.sh
[Wed Feb  3 08:15:35 CET 2021] Installing alias to '/root/.profile'
[Wed Feb  3 08:15:35 CET 2021] OK, Close and reopen your terminal to start using acme.sh
[Wed Feb  3 08:15:36 CET 2021] Good, bash is found, so change the shebang to use bash as preferred.
[Wed Feb  3 08:15:39 CET 2021] OK

Ne tenez pas compte de l’erreur, elle indique simplement qu’il nous manque un paquet si nous souhaitons utiliser le mode «standalone». Nous ne l’utiliserons pas, donc nous pouvons ignorer cette erreur.

Ensuite, il faut générer le fichier «.profile» de l’utilisateur courant («root») afin de pouvoir utiliser immédiatement les commandes shell. Pour ce faire, vous devez taper la commande suivante:

source ~/.profile

Vous devez ensuite donner le droit d’exécution au script avec la commande:

cd $ACME_HOME
chmod a+x acme.sh

On active la mise à jour automatique du client:

./acme.sh --upgrade --auto-upgrade

Vous devriez obtenir le résultat suivant:

[Wed Feb  3 08:16:40 CET 2021] Installing from online archive.
[Wed Feb  3 08:16:40 CET 2021] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Wed Feb  3 08:16:43 CET 2021] Extracting master.tar.gz
[Wed Feb  3 08:16:43 CET 2021] It is recommended to install socat first.
[Wed Feb  3 08:16:43 CET 2021] We use socat for standalone server if you use standalone mode.
[Wed Feb  3 08:16:43 CET 2021] If you don't use standalone mode, just ignore this warning.
[Wed Feb  3 08:16:43 CET 2021] Installing to /usr/local/share/acme.sh
[Wed Feb  3 08:16:43 CET 2021] Installed to /usr/local/share/acme.sh/acme.sh
[Wed Feb  3 08:16:44 CET 2021] Good, bash is found, so change the shebang to use bash as preferred.
[Wed Feb  3 08:16:47 CET 2021] OK
[Wed Feb  3 08:16:47 CET 2021] Install success!
[Wed Feb  3 08:16:48 CET 2021] Upgrade success!

Comme tout à l’heure, ne tenez pas compte de l’erreur. Nous n’utilisons pas ce mode.

Nous avons fini la première étape, nous allons maintenant passer au paramétrage de l’API d’OVH.

Configuration des DNS via l’API OVH

Pour générer le certificat «Wilcard» et le renouveler automatiquement, nous allons utiliser l’API d’OVH.

Nous allons générer 3 clés différentes qui nous permettront de nous authentifier sur l’API et d’effectuer les actions nécessaires à la création du certificat.

Par mesure de sécurité, OVH permet de limiter les actions réalisables via son API, nous allons donc les limiter uniquement à la gestion de notre domaine et seulement cela.

GET = /domain/zone/votre-domaine.fr
GET = /domain/zone/votre-domaine.fr/*
POST = /domain/zone/votre-domaine.fr/*
PUT = /domain/zone/votre-domaine.fr/*
DELETE = /domain/zone/votre-domaine.fr/record/*

Pour cela, vous pouvez modifier et copier ce lien en modifiant votre nom de domaine cela va vous permettre de préremplir les champs sur l’interface d’OVH :

https://api.ovh.com/createToken/?GET=/domain/zone/votre-domaine.fr&GET=/domain/zone/votre-domaine.fr/&PUT=/domain/zone/votre-domaine.fr/&POST=/domain/zone/votre-domaine.fr/&DELETE=/domain/zone/votre-domaine.fr/record/

Vous n’avez plus qu’a saisir votre identifiant OVH dans le champ «Account ID or email address» et votre mot de passe dans le champ «Password». Ensuite vous devez donner un nom et une description au script dans les champs «Script name» et «Script description». Attention, le champ «Script name» n’accepte ni les espaces, ni les points ou les caractères spéciaux. Pour finir mettez la validité du script dans le champ «Validity» à la valeur «Unlimited» puis valider avec le bouton «Create keys».

Vous allez obtenir les informations d’authentification, je vous conseille de copier les clés et de les sauvegarder dans un fichier «.txt».

Nous allons revenir sur notre session SSH et taper les commandes suivantes où vous allez modifier les valeurs par les vôtres:

export OVH_END_POINT=ovh-eu
export OVH_AK="Votre_application_key"
export OVH_AS="Votre_application_secret"
export OVH_CK="Votre_consumer_key"

Création du certificat Let’s Encrypt Wildcard

Par défaut, ACME utilise une clé de chiffrement de type RSA à 2048 bits. Nous allons forcer cette clé RSA à 4096 bits pour renforcer le niveau de sécurité, ce qui se fait par l’ajout du paramètre «–keylength 4096» dans la commande de création du certificat.

Venons-en à la création du certificat à proprement parlé. Pour cela tapez les commandes suivantes en remplaçant «votre domaine.fr» par le nom de votre domaine :

cd $ACME_HOME
export CERT_DOMAIN="votre-domaine.fr"
export CERT_WDOMAIN="*.votre-domaine.fr"
export CERT_DNS="dns_ovh"
./acme.sh --issue --keylength 4096 -d "$CERT_DOMAIN" -d "$CERT_WDOMAIN" --dns "$CERT_DNS"

Si tout se déroule correctement, vous devriez obtenir le résultat suivant:

[Wed Feb  3 08:33:14 CET 2021] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Wed Feb  3 08:33:14 CET 2021] Multi domain='DNS:laescuela.fr,DNS:.laescuela.fr' [Wed Feb  3 08:33:15 CET 2021] Getting domain auth token for each domain [Wed Feb  3 08:33:19 CET 2021] Getting webroot for domain='laescuela.fr' [Wed Feb  3 08:33:19 CET 2021] Getting webroot for domain='.laescuela.fr'
[Wed Feb  3 08:33:20 CET 2021] Adding txt value: 6AUT4flm_TUKSXI35nEwT-tAjMgnEtUcdazATIIIv1z6s for domain:  _acme-challenge.laescuela.fr
[Wed Feb  3 08:33:20 CET 2021] Using OVH endpoint: ovh-eu
[Wed Feb  3 08:33:20 CET 2021] Checking authentication
[Wed Feb  3 08:33:23 CET 2021] Consumer key is ok.
[Wed Feb  3 08:33:24 CET 2021] Adding record
[Wed Feb  3 08:33:25 CET 2021] Added, sleep 10 seconds.
[Wed Feb  3 08:33:36 CET 2021] The txt record is added: Success.
[Wed Feb  3 08:33:37 CET 2021] Adding txt value: Sk3-tdbv9pgeHSHZt14YVa_S7dbMee_bRvnzTkKgYbA for domain:  _acme-challenge.laescuela.fr
[Wed Feb  3 08:33:37 CET 2021] Using OVH endpoint: ovh-eu
[Wed Feb  3 08:33:37 CET 2021] Checking authentication
[Wed Feb  3 08:33:37 CET 2021] Consumer key is ok.
[Wed Feb  3 08:33:39 CET 2021] Adding record
[Wed Feb  3 08:33:40 CET 2021] Added, sleep 10 seconds.
[Wed Feb  3 08:33:51 CET 2021] The txt record is added: Success.
[Wed Feb  3 08:33:51 CET 2021] Let's check each DNS record now. Sleep 20 seconds first.
[Wed Feb  3 08:34:12 CET 2021] You can use '--dnssleep' to disable public dns checks.
[Wed Feb  3 08:34:12 CET 2021] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck
[Wed Feb  3 08:34:12 CET 2021] Checking laescuela.fr for _acme-challenge.laescuela.fr
[Wed Feb  3 08:34:15 CET 2021] Domain laescuela.fr '_acme-challenge.laescuela.fr' success.
[Wed Feb  3 08:34:16 CET 2021] Checking laescuela.fr for _acme-challenge.laescuela.fr
[Wed Feb  3 08:34:16 CET 2021] Domain laescuela.fr '_acme-challenge.laescuela.fr' success.
[Wed Feb  3 08:34:16 CET 2021] All success, let's return
[Wed Feb  3 08:34:16 CET 2021] Verifying: laescuela.fr
[Wed Feb  3 08:34:20 CET 2021] Success
[Wed Feb  3 08:34:20 CET 2021] Verifying: *.laescuela.fr
[Wed Feb  3 08:34:24 CET 2021] Success
[Wed Feb  3 08:34:24 CET 2021] Removing DNS records.
[Wed Feb  3 08:34:24 CET 2021] Removing txt: 6AUT4flm_TUKSXI35nEwT-tAjMgnEtUcdazATIIIv1z6s for domain: _acme-challenge.laescuela.fr
[Wed Feb  3 08:34:25 CET 2021] Using OVH endpoint: ovh-eu
[Wed Feb  3 08:34:25 CET 2021] Checking authentication
[Wed Feb  3 08:34:26 CET 2021] Consumer key is ok.
[Wed Feb  3 08:34:29 CET 2021] Removed: Success
[Wed Feb  3 08:34:29 CET 2021] Removing txt: Sk3-tdbv9pgeHSHZt14YVa_S7dbMee_bRvnzTkKgYbA for domain: _acme-challenge.laescuela.fr
[Wed Feb  3 08:34:30 CET 2021] Using OVH endpoint: ovh-eu
[Wed Feb  3 08:34:30 CET 2021] Checking authentication
[Wed Feb  3 08:34:30 CET 2021] Consumer key is ok.
[Wed Feb  3 08:34:36 CET 2021] Removed: Success
[Wed Feb  3 08:34:36 CET 2021] Verify finished, start to sign.
[Wed Feb  3 08:34:36 CET 2021] Lets finalize the order.
[Wed Feb  3 08:34:36 CET 2021] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/101560753/7685112001'
[Wed Feb  3 08:34:37 CET 2021] Downloading cert.
[Wed Feb  3 08:34:37 CET 2021] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/047120bf0677b4af1d1e53b135f3d8'
[Wed Feb  3 08:34:38 CET 2021] Cert success.
-----BEGIN CERTIFICATE-----
LqXT+fh4aa90ud.....................teKSjJo72H7lVm
-----END CERTIFICATE-----
[Wed Feb  3 08:34:38 CET 2021] Your cert is in  /volume1/Certificats/laescuela.fr/laescuela.fr.cer
[Wed Feb  3 08:34:38 CET 2021] Your cert key is in  /volume1/Certificats/laescuela.fr/laescuela.fr.key
[Wed Feb  3 08:34:38 CET 2021] The intermediate CA cert is in  /volume1/Certificats/laescuela.fr/ca.cer
[Wed Feb  3 08:34:38 CET 2021] And the full chain certs is there:  /volume1/Certificats/laescuela.fr/fullchain.cer

Déploiement du certificat sur le NAS Synology

Nous allons maintenant déployer notre certificat sur notre NAS Synology à l’aide du Synology DSM deployhook.

Nous allons paramétré le certificat avec la méthode «Annule et remplace» du certificat de sécurité par défaut. L’avantage de cette méthode est qu’elle remplace automatiquement le certificat par défaut sans avoir besoin de le mettre par défaut par la suite.

Dans votre session SSH, tapez les commandes suivantes en adaptant les valeurs à votre configuration si besoin:

cd $ACME_HOME
export SYNO_Scheme="https"
export SYNO_Hostname="localhost"
export SYNO_Port="5001"

On défini ensuite les variables d’environnement. Les «simples cotes» (‘) sont utilisées pour «échapper» les éventuels caractères spéciaux qui serait présents dans vos identifiants et mots de passe.

La variable «SYNO_Certificate» doit rester vide, elle permet de pouvoir remplacer le certificat par défaut par celui que vous avez créé.

export SYNO_Username='Identifiant'
export SYNO_Password='Mot_de_passe'
export SYNO_Certificate=""

On termine par la commande qui vous permet de déployer votre certificat:

./acme.sh --deploy -d "$CERT_DOMAIN" --deploy-hook synology_dsm

Vous devriez voir le résultat suivant:

[Wed Feb 3 08:40:24 CET 2021] Logging into localhost:5001
[Wed Feb 3 08:40:26 CET 2021] Getting certificates in Synology DSM
[Wed Feb 3 08:40:27 CET 2021] Generate form POST request
[Wed Feb 3 08:40:27 CET 2021] Upload certificate to the Synology DSM
[Wed Feb 3 08:41:01 CET 2021] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 16
[Wed Feb 3 08:41:01 CET 2021] http services were restarted
[Wed Feb 3 08:41:01 CET 2021] Success

Vous pouvez ensuite vérifier que votre nouveau certificat est visible sur l’interface de votre NAS Synology dans « Panneau de configuration / Sécurité / Certificat».

Configurer le renouvellement du certificat

Maintenant que le certificat Wildcard est créé, il nous faut programmer son renouvellement automatique.

En prérequis, vous devez installer le package «Python module» ou «Python 3» au choix. Pour cela vous installer un des 2 paquets qui se trouvent dans la partie «Tierce partie» dans le «Centre de paquets» de DSM:

Vous devez placer le script dans le répertoire «Certificats» que nous avons créé plus tôt.

Pour configurer la tâche de renouvellement, nous allons créer la tâche dans le planificateur de tâches de DSM. Pour cela, dans «Panneau de configuration / Planificateur de tâches», cliquer sur le bouton «Créer» et sélectionner dans le popup: «Tâche planifiée / Script défini par l’utilisateur».

Dans la fenêtre «Créer une tâche», puis dans l’onglet «Général» nommez la tâche à exécuter périodiquement. Par exemple : «Renouvellement Certificats». L’utilisateur doit être «root» et la case «Activé» doit être cochée.

Dans l’onglet «Programmer», vous pouvez le configurer comme sur l’écran ci-dessous. Rien ne vous oblige à garder le même jour ou la même heure.

Enfin, dans l’onglet «Paramètres de la tâche», vous choisissez si vous voulez recevoir ou non un email suite à l’exécution du script ou au contraire suite à sa mauvaise exécution.

L’exécution du script va créer un fichier log qui se nomme «acme_renew_python.log» dans le répertoire «/volume1/Certificats/Acme_renew/».

Voici un exemple de log que j’ai eu de mon côté suite aux premiers lancements:

02/03/2021 12:32:20 PM INFO:>> Lancement du script acme_renew.py
02/03/2021 12:32:20 PM INFO:>> Si option -h ou -v, alors pas d'autre log
02/03/2021 12:32:20 PM INFO:
02/03/2021 12:32:20 PM INFO:>> acme_renew release : Version 1.44 Released -- 21-aout-2020
02/03/2021 12:32:20 PM INFO:>> version python sys : Python 3.8.2
02/03/2021 12:32:20 PM INFO: SYNOCERT : /usr/syno/etc/certificate
02/03/2021 12:32:20 PM INFO: LOCALCERT : /usr/local/etc/certificate
02/03/2021 12:32:20 PM INFO: ACMECERTS : /volume1/documents/Sauvegardes/Certificats
02/03/2021 12:32:20 PM INFO: ndd.tld : laescuela.fr
02/03/2021 12:32:20 PM INFO: certtype : RSA
02/03/2021 12:32:20 PM INFO: scriptdir : /volume1/documents/Sauvegardes/Certificats/Acme_renew
02/03/2021 12:32:20 PM INFO: log [-l] : True
02/03/2021 12:32:20 PM INFO: clean [-c] : False
02/03/2021 12:32:20 PM INFO: force [-f] : False
02/03/2021 12:32:20 PM INFO: test [-t] : False
02/03/2021 12:32:20 PM INFO:-- Lecture du fichier /usr/syno/etc/certificate/_archive/DEFAULT
02/03/2021 12:32:20 PM INFO:-- Ancien certificat par DEFAULT, a renouveler : nCjEKE
02/03/2021 12:32:20 PM INFO:-- Lecture du fichier /usr/syno/etc/certificate/_archive/INFO
02/03/2021 12:32:20 PM INFO:-- Date de renouvellement autorisee (T0+60 jours par defaut) : Sun Apr 4 07:34:38 UTC 2021
02/03/2021 12:32:20 PM WARNING:-- La date de renouvellement du certificat ( Sun Apr 4 07:34:38 UTC 2021 ) n'est pas atteinte
02/03/2021 12:32:20 PM WARNING:-- Fin de procedure

Article précédent

Vous pourriez aussi aimer

Aucun commentaire

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.