Aller au contenu

[TUTO] Certificat Let's Encrypt avec acme.sh & api Ovh en Docker (DSM6/7) (Update 07/09/22)


Messages recommandés

Posté(e)
il y a 38 minutes, Mic13710 a dit :

Ce n'est pas la raison.

Le déploiement se fait directement après le renouvellement du certificat.

Par la suite, le script ne fait que vérifier la date de validité du certificat. S'il c'est moins de 2 mois, il termine la tâche. Il ne vérifie pas si le certificat a été déployé ou pas.

Je parle d'un script perso, fait avec cette commande :

docker exec Acme sh -c "acme.sh --deploy -d 'mydomain.com' --deploy-hook synology_dsm"

J'ai ces scripts dans mon dossier ACME :

u4pqaa8.png

le acme_3B-export_auto.sh contient la commande du §3B :

##==============================================================================================
##                                                                                            ##
##                                   acme_3B-export_auto.sh                                   ##
##                                                                                            ##
##        Script pour paramétrer le déploiement automatique des certificats sur le Syno       ##
##                                                                                            ##
##==============================================================================================
##                                                                                            ##
## Voir tuto :                                                                                ##
## https://www.nas-forum.com/forum/topic/68046-tuto-certificat-lets-encrypt-avec-acmesh-api-ovh-en-docker-dsm67/
##                                                                                            ##
##==============================================================================================

echo "$(date "+%R:%S - ") Script pour paramétrer le déploiement automatique des certificats sur le Syno."
echo "$(date "+%R:%S - ") Exécution de la commande..."

docker exec Acme sh -c "acme.sh --deploy -d 'mon-ndd.ovh' --deploy-hook synology_dsm"

num_erreur=$?           # On stocke le code de retour de la commande précédente.

echo "$(date "+%R:%S - ") Script de création du certificat wildcard terminé"

exit $num_erreur

Il en va de même pour les autres scripts.

Et c'est ce script que je n'ai plus lancé dans le planificateur de tâches.

Le docker-compose ne permet que de créer ou de mettre à jour le conteneur ACME, non ?

Donc, mon certificat était renouvelé tout seul, mais pas déployé dans DSM.

Posté(e)

On parle ici d'un cas particulier. Ma réponse était en rapport avec le tuto où il n'y a pas de script à rajouter dans ACME.

De toute manière, si le déploiement ne s'est pas effectué correctement lors du renouvellement à cause de ce fameux SAVED_,  il y a fort à parier qu'il ne fonctionnera pas mieux à partir d'un script additionnel.

il y a 27 minutes, MilesTEG1 a dit :

Le docker-compose ne permet que de créer ou de mettre à jour le conteneur ACME, non ?

Perso, je ne fais pas la mise à jour auto du Docker-compose. J'en suis resté à la version précédente. C'est un choix personnel.

Ce qui ne change en rien au mode opératoire du script acme.sh qui est identique avec ou sans mise à jour du Docker-compose. acme.sh est lancé automatiquement tous les jours à 0.00. Il vérifie d'abord qu'il est à jour à la dernière version et télécharge la nouvelle version si besoin, puis il vérifie la date du certificat et si au delà des 60 jours, il lance son renouvellement et son déploiement. Nul n'est besoin de scripts supplémentaires, à condition bien entendu que le processus se soit déroulé normalement.

Aussi, je ne comprends pas bien le pourquoi de tes scripts persos.

De mon côté, suite au problème rencontré lors du dernier renouvellement avec le SAVED_CERTIFICATE, j'ai rajouté une tâche planifiée non activée dans DSM pour relancer le déploiement en cas de besoin.

Posté(e)

@Mic13710 OK, je crois avoir mal compris un point du tuto. En fait, il n'y a pas de tâche planifiée qui doit tourner tous les jours, n'est-ce pas ? (autre que celle de création du conteneur).

Et c'est le conteneur qui renouvelle le certificat comme un grand.
Mais le déploiement, il n'a pas besoin d'être refait ? Il n'est fait qu'une fois et après, aux renouvellements comment ça se passe ?

Posté(e)
Il y a 1 heure, MilesTEG1 a dit :

Mais le déploiement, il n'a pas besoin d'être refait ? Il n'est fait qu'une fois et après, aux renouvellements comment ça se passe ?

Le déploiement c'est seulement pour attribuer le certificat aux applications en fonction des choix fait dans les paramètres dans DSM.

Une fois déployé, il est valide jusqu'à expiration du certificat. Il n'y a donc pas besoin de refaire l'opération.

Le déploiement est à nouveau lancé par le script qu'après l'obtention d'un nouveau certificat.

Posté(e)

@Mic13710d’accord, je n’ai donc pas à lancer à nouveau la commande du 3B , c’est bien ça ?

tant que le certificat se renouvelle tout seul , enfin quand acme le fait, ce certificat de redéploie via acme ?

 

on en revient donc à l’erreur de variable que j’ai constaté ce matin et qui dure depuis je ne sais pas quand (faudrait que je consulte les logs).

Posté(e)

Non, inutile. A partir du moment ou le déploiement a été fait par le script, tout est OK.

Le problème du non déploiement a été localisé au niveau du SAVED_CERTIFICATE qui chez certains ne passe pas. J'en ai moi aussi été victime et je ne comprends toujours pas pourquoi ni comment c'est arrivé. Chez d'autres, c'est carrément tous les SAVED autres que les clés qui ont été la cause. Voir les échanges de ce fil depuis le passage à la version 3.0.6 d'acme.sh

Posté(e)
Il y a 9 heures, Mic13710 a dit :

Non, inutile. A partir du moment ou le déploiement a été fait par le script, tout est OK.

Le problème du non déploiement a été localisé au niveau du SAVED_CERTIFICATE qui chez certains ne passe pas. J'en ai moi aussi été victime et je ne comprends toujours pas pourquoi ni comment c'est arrivé. Chez d'autres, c'est carrément tous les SAVED autres que les clés qui ont été la cause. Voir les échanges de ce fil depuis le passage à la version 3.0.6 d'acme.sh

J’ai épinglé ton message du coup, mais je ne voyais pas en quoi changer le tutoriel dans la mesure ou dans son était actuel je l’ai déployé encore chez 3 personnes avec succès le mois dernier et chez moi aucun changement fait et tout roule.

Tu n’avais rien modifier @Mic13710 ? Clé d’api, compte syno ? A mon avis c’est le Pass World en base64 qui est la cause du problème.

Posté(e)

@Einsteinium

Non, rien changé. La seule modif c'est le passage d'acme.sh en rev 3.0.6 qui a mis un peu le foutoir chez certains.

il y a une heure, Einsteinium a dit :

A mon avis c’est le Pass World en base64 qui est la cause du problème.

Pas le password (il n'est pas en base 64), mais le nom du certificat.

Alors qu'il fonctionnait très bien jusqu'à l'avant dernier renouvellement, le script n'arrive plus à le récupérer ce qui bloque le déploiement.

Voir le sujet de Kramlech dans lequel je parle de ça :

J'ai eu le même problème sur 3 NAS. Je ne suis donc pas un cas isolé.

Pas de problème pour ceux qui n'ont qu'un seul certificat. Pour ma part j'en ai 3 et donc le nom du certificat est primordial pour pouvoir déployer.

Je m'en suis sorti en changeant la variable SAVED_SYNO_Certificate=__ACME_BASE64__START_NomDuCertificatEnB64==__ACME_BASE64__END_'

en SYNO_Certificate='Nom du Certificat dans DSM'

Mais je pense que c'est provisoire car après déploiement, la variable a été à nouveau enregistrée en Base 64.

Posté(e)

D’accord 3 certificats, peu être la cause alors.

J’ai deux domaines pour ma part qui pointe vers le syno, mais j’ai fais un seul wildcard pour inclure les deux domaines. )et je n’ai aucune base64 dans mes fichiers)

  • 4 semaines après...
Posté(e) (modifié)

Bonjour,

Savez-vous me dire ou l'on voit toutes les API que l'on a crée chez OVH ? 

je pose la question car j'en ai déjà crée ou moins une et lors de la création d'une seconde dans la 1er partie je vaudrai pas remettre la même chose. (ou cela n'a pas d'importance ?)
image.png.be9e861d90f71b64e6c1ed92276cbfcc.png

Modifié par firlin
Posté(e) (modifié)

@Einsteinium
J'ai pris un autre non de domaine pour mon autre nas distant.comme ca je n'ai pas besoin de me transfert d'un nas à l’autre les clé crée pour acmé.
Me semble que j'ai utilise ton liens il est en fin de 1er page voir début de la 2eme
J'ai rien vu
Dans application name je peux mettre certificat Lets nas 2 ?

 

Modifié par firlin
Posté(e)
il y a 12 minutes, firlin a dit :

@Einsteinium
J'ai pris un autre non de domaine pour mon autre nas distant.comme CA j'ai pas besoin de me transfert d'un nas a l’autre les crée pour acmé.
Me semble que j'ai utilise ton liens il est en fin de 1er page voir début de la 2eme
J'ai rien vu
Dans application mane je peux mettre certificat Lets nas 2 ?

 

Pas compris il manque des mots ^^
Mais oui tu peux utiliser les mêmes clés d’api si tu n’as pas mis de blocage IP sur cette dernière.

  • 3 semaines après...
Posté(e)

Bonjour @Einsteinium,

Je viens de m'apercevoir que mon certificat ne c'est pas renouvellé (dur le retour de vacance)

voici le log d'erreur

Citation

[Sun May 21 00:26:01 UTC 2023] Running cmd: cron
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] default_acme_server='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] ===Starting cron===
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] GET
[Sun May 21 00:26:01 UTC 2023] url='https://api.github.com/repos/acmesh-official/acme.sh/git/refs/heads/master'
[Sun May 21 00:26:01 UTC 2023] timeout=
[Sun May 21 00:26:01 UTC 2023] _CURL='curl --silent --dump-header /acme.sh/http.header  -L  -g '
[Sun May 21 00:26:01 UTC 2023] ret='0'
[Sun May 21 00:26:01 UTC 2023] Already uptodate!
[Sun May 21 00:26:01 UTC 2023] Upgrade success!
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] Auto upgraded to: 3.0.6
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] _stopRenewOnError
[Sun May 21 00:26:01 UTC 2023] _server
[Sun May 21 00:26:01 UTC 2023] _set_level='2'
[Sun May 21 00:26:01 UTC 2023] di='/acme.sh/nondedomaine.ovh/'
[Sun May 21 00:26:01 UTC 2023] d='nondedomaine.ovh'
[Sun May 21 00:26:01 UTC 2023] _renewServer
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] DOMAIN_PATH='/acme.sh/nondedomaine.ovh'
[Sun May 21 00:26:01 UTC 2023] Renew: 'nondedomaine.ovh'
[Sun May 21 00:26:01 UTC 2023] Le_API='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] Renew to Le_API=https://acme-v02.api.letsencrypt.org/directory
[Sun May 21 00:26:01 UTC 2023] Using config home:/acme.sh
[Sun May 21 00:26:01 UTC 2023] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Sun May 21 00:26:01 UTC 2023] Skip, Next renewal time is: 2023-06-16T00:47:02Z
[Sun May 21 00:26:01 UTC 2023] Add '--force' to force to renew.
[Sun May 21 00:26:01 UTC 2023] Return code: 2
[Sun May 21 00:26:01 UTC 2023] Skipped nondedomaine.ovh
[Sun May 21 00:26:01 UTC 2023] _error_level='3'
[Sun May 21 00:26:01 UTC 2023] _set_level='2'
[Sun May 21 00:26:01 UTC 2023] ===End cron===

tu sais de quoi cela peux venir  ?

 

Posté(e)
Il y a 13 heures, firlin a dit :

Sun May 21 00:26:01 UTC 2023] Skip, Next renewal time is: 2023-06-16T00:47:02Z

Bonjour @firlin

Sauf erreur de ma part il semble que la date de renouvellement soit encore à venir (16 juin 2023) donc le script a été interrompu mais ce n'est pas une erreur dans ce cas.

Cordialement

Audio

Posté(e)

Merci de ton aide @Audio,
J'ai trouver mon problème cela venez de mon fichier account.conf et ndd.ovh.conf ou le

Citation

SAVED_SYNO_Hostname='172.17.0.1'

m’était pas bon dans mon cas c'est 172.20.0.1

merci @Einsteinium pour le tuyau sur le ndd.ovh.conf

Posté(e) (modifié)

Bonjour à tous,

J'ai un soucis lors du déploiement de mon certificat et je voulais savoir si vous aviez une idée d'où pourrait venir le problème.

J'ai vu le message épinglé et ça ressemble à cette erreur mais je sais pas quoi modifier.

acme.sh.log

[Fri May 26 00:47:06 UTC 2023] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/043117355f97474cf9c204ded0848f8b2160'
[Fri May 26 00:47:06 UTC 2023] Cert success.
[Fri May 26 00:47:06 UTC 2023] Your cert is in: /acme.sh/domaine.ovh/domaine.ovh.cer
[Fri May 26 00:47:06 UTC 2023] Your cert key is in: /acme.sh/domaine.ovh/domaine.ovh.key
[Fri May 26 00:47:06 UTC 2023] The intermediate CA cert is in: /acme.sh/domaine.ovh/ca.cer
[Fri May 26 00:47:06 UTC 2023] And the full chain certs is there: /acme.sh/domaine.ovh/fullchain.cer
[Fri May 26 00:47:06 UTC 2023] _on_issue_success
[Fri May 26 00:47:06 UTC 2023] _deployApi='/root/.acme.sh/deploy/synology_dsm.sh'
[Fri May 26 00:47:06 UTC 2023] _cdomain='domaine.ovh'
[Fri May 26 00:47:06 UTC 2023] SYNO_Certificate
[Fri May 26 00:47:06 UTC 2023] _base_url='http://192.168.1.16:5050'
[Fri May 26 00:47:06 UTC 2023] Getting API version
[Fri May 26 00:47:06 UTC 2023] GET
[Fri May 26 00:47:06 UTC 2023] url='http://192.168.1.16:5050/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth'
[Fri May 26 00:47:06 UTC 2023] timeout=
[Fri May 26 00:47:06 UTC 2023] _CURL='curl --silent --dump-header /acme.sh/http.header  -L  -g '
[Fri May 26 00:47:08 UTC 2023] ret='0'
[Fri May 26 00:47:08 UTC 2023] Logging into 192.168.1.16:5050
[Fri May 26 00:47:08 UTC 2023] POST
[Fri May 26 00:47:08 UTC 2023] _post_url='http://192.168.1.16:5050/webapi/auth.cgi?enable_syno_token=yes'
[Fri May 26 00:47:08 UTC 2023] _CURL='curl --silent --dump-header /acme.sh/http.header  -L  -g '
[Fri May 26 00:47:15 UTC 2023] _ret='0'
[Fri May 26 00:47:15 UTC 2023] token='JonG0WKa1sE4Q'
[Fri May 26 00:47:15 UTC 2023] Getting certificates in Synology DSM
[Fri May 26 00:47:15 UTC 2023] POST
[Fri May 26 00:47:15 UTC 2023] _post_url='http://192.168.1.16:5050/webapi/entry.cgi'
[Fri May 26 00:47:15 UTC 2023] _CURL='curl --silent --dump-header /acme.sh/http.header  -L  -g '
[Fri May 26 00:47:15 UTC 2023] _ret='0'
[Fri May 26 00:47:15 UTC 2023] escaped_certificate
[Fri May 26 00:47:15 UTC 2023] Unable to find certificate:  and $SYNO_Create is not set
[Fri May 26 00:47:15 UTC 2023] Error deploy for domain:domaine.ovh
[Fri May 26 00:47:15 UTC 2023] Deploy error.
[Fri May 26 00:47:15 UTC 2023] Return code: 1
[Fri May 26 00:47:15 UTC 2023] Error renew domaine.ovh.
[Fri May 26 00:47:15 UTC 2023] _error_level='1'
[Fri May 26 00:47:15 UTC 2023] _set_level='2'
[Fri May 26 00:47:15 UTC 2023] The NOTIFY_HOOK is empty, just return.
[Fri May 26 00:47:15 UTC 2023] ===End cron===

account.conf

LOG_FILE="/acme.sh/acme.sh.log"
LOG_LEVEL=1

AUTO_UPGRADE='1'

#NO_TIMESTAMP=1
    
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
SAVED_OVH_AK='***'
SAVED_OVH_AS='***'
SAVED_OVH_CK='***'
SAVED_SYNO_Scheme='http'
SAVED_SYNO_Hostname='192.168.1.16'
SAVED_SYNO_Port='5050'
SAVED_SYNO_Username='***'
SAVED_SYNO_Password='***'
SAVED_SYNO_DID=''
SAVED_SYNO_Certificate='description du certificat mise dans le DSM'
UPGRADE_HASH='0d25f7612bf3742d9c4fb1abc493b25e495c3'
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'

domaine.ovh.conf

Le_Domain='domaine.ovh'
Le_Alt='*.domaine.ovh'
Le_Webroot='dns_ovh'
Le_PreHook=''
Le_PostHook=''
Le_RenewHook=''
Le_API='https://acme-v02.api.letsencrypt.org/directory'
Le_Keylength='4096'
Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/11203645/18454647867'
Le_DeployHook='synology_dsm,'
SAVED_SYNO_Scheme='http'
SAVED_SYNO_Hostname='192.168.1.16'
SAVED_SYNO_Port='5050'
SAVED_SYNO_Username='***'
SAVED_SYNO_Password='***'
SAVED_SYNO_DID=''
Le_LinkOrder='https://acme-v02.api.letsencrypt.org/acme/order/112036945/1845447867'
Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/03117355f97474cf9c4ded0848f8b160'
Le_CertCreateTime='1685092026'
Le_CertCreateTimeStr='2023-05-26T00:17:06Z'
Le_NextRenewTimeStr='2023-07-24T00:17:06Z'
Le_NextRenewTime='1690159926'
SAVED_SYNO_Certificate='__ACME_BASE64__START_ZGVzY3JpcHpb24ZHUgY2VydGlmaWNhdtXNlIGhbnMgbGgRFNN__ACME_BASE64__END_'
SAVED_SYNO_TOTP_SECRET=''

Merci à vous !

Modifié par Pommefrais3
Posté(e)

@Pommefrais3 l'Ip dans l'account.conf n'est pas correcte. Elle devrait être celle de docker 172.17.0.1.

Je suppose que le port 5050 est le http de DSM. Sinon il faut le changer.

Supprimer le Saved_Syno_Certificate (il ne fallait pas copier exactement ce qui est écrit dans le tuto mais mettre le nom qui est donné au certificat dans DSM). De toute façon, il fait doublon avec celui en base64 qui est dans le ndd.conf

  • 1 mois après...
Posté(e)

Bonjour,

Une question de total novice :

J'ai suivi le tuto pour créer et deployer un certificat sur mon nas (ds220+) tout a fonctionné à part une notification à chaque lancement du cron ACME mais je n'y prêtais pas attention... Et forcement une fois le cert expiré,le  renouvellement  n'a pas fonctionné. Je me suis penché sur les logs. Acme ne parvient pas à "resolver" l'adresse ACME_DIRECTORY :

[Thu Jul  6 00:28:27 UTC 2023] url='https://acme-v02.api.letsencrypt.org/directory'
[Thu Jul  6 00:28:27 UTC 2023] timeout=
[Thu Jul  6 00:28:27 UTC 2023] _CURL='curl --silent --dump-header /acme.sh/http.header  -L  -g '
[Thu Jul  6 00:28:32 UTC 2023] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 6
[Thu Jul  6 00:28:32 UTC 2023] ret='6'
[Thu Jul  6 00:28:32 UTC 2023] Can not init api for: https://acme-v02.api.letsencrypt.org/directory.
[Thu Jul  6 00:28:32 UTC 2023] Sleep 10 and retry.
[Thu Jul  6 00:28:42 UTC 2023] Can not init api, for https://acme-v02.api.letsencrypt.org/directory
[Thu Jul  6 00:28:42 UTC 2023] Return code: 1
[Thu Jul  6 00:28:42 UTC 2023] Error renew ndd.tld.
[Thu Jul  6 00:28:42 UTC 2023] _error_level='1'
[Thu Jul  6 00:28:42 UTC 2023] _set_level='2'

l'adresse répond au curl effectué en ssh.

Avez-vous des idées d'où cela peut venir?

Posté(e) (modifié)

Bon, j'ai supprimé les caratères spéciaux du mdp d'utilisateur renseigné dans dans le account.conf comme j'ai pu le lire dans ce forum quelques pages avant mais j'ai eu la même erreur cette nuit.

J'ai l'impression que le container n'a pas accès à internet. J'ai donc rajouté une exception dans le FW:
172.17.0.0 ( la passerelle du container) -> tout autoriser.

On verra cette nuit...

Au fait, y a moyen de lancer le cron manuellement dans docker? car je doit attendre 24h entre chaque test... reconstruire le container ne le relance pas.

Merci

Modifié par emptiness
Posté(e) (modifié)

C’était le FW qui bloquait ! le renouvellement a fonctionné.

 

Il y a 1 heure, emptiness a dit :

Au fait, y a moyen de lancer le cron manuellement dans docker?

Je m'auto-réponds, ça peut servir à quelqu'un d'autre

acme.sh --cron
Modifié par emptiness

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.