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)

@Einsteinium ok pas de problème pour mettre en ligne. Le temps de le mettre au propre et de faire un mini mode d'emploi (là encore, pour accéder à l'API, il faut générer des clés au préalable) ....

Posté(e)
il y a une heure, bruno78 a dit :

@Einsteinium ok pas de problème pour mettre en ligne. Le temps de le mettre au propre et de faire un mini mode d'emploi (là encore, pour accéder à l'API, il faut générer des clés au préalable) ....

On peut reprendre la clé existante

Posté(e)

@Einsteinium Oui exact.

Ayant plusieurs domaines, j'ai simplifié en créant un jeu de clés supplémentaire me permettant d'accéder d'un coup d'un seul à l'ensemble des domaines dispo sous mon compte OVH. C'est effectivement peut-être optimisable ....

Posté(e) (modifié)

 

Il y a 4 heures, bruno78 a dit :

Bonjour @Ivanovitch,

j'ai eu également ces derniers jours beaucoup (trop ?) d'erreurs de renouvellement de certificats à cause des enregistrements TXT.

ahah, je vois je suis donc pas fou 😂

ton script sera plus que le bienvenu !!

Il y a 6 heures, Einsteinium a dit :

Apparemment j’ai certains quelques bug oui, mais en général cela passe le lendemain, après cela peu venir aussi bien de ovh que de le, faut faire avec, les rares  maintenance doivent ce faire la nuit je penses.

Je viens de faire 10 essais de suite:

  • 100% ok : 1
  • cert ok mais suppr record nok : 2
  • nok no cert : 7

donc, même avec le script de bruno pour dépolluer la zone, on est sur un taux de réussite de seulement 30% 🥴

Et à priori c'est juste OVH qui déconne car -sur les problèmes que je vois- la partie LE concerne uniquement l'acquisition des challenges à mettre dans les TXT, pas leur création / suppression.

A continuer de tester dans les jours/semaines qui suivent mais si OVH continue à faire des siennes, une solution plus pérenne pourrait être délocaliser la zone DNS chez DigitalOcean, CloudFlare, ... pas idéal mais bon 😕

 

Il y a 4 heures, MilesTEG1 a dit :

Je viens de vérifier, je n'ai qu'une entrée TXT dans la zone DNS de mon nom de domaine OVH.

C'est un txt nommé __acme_challenge.ndd.tld ? tu peux le supprimer, car justement il est (sont) normalement crée et détruit durant la procédure de renouvellement

Modifié par Ivanovitch
Posté(e)
il y a 25 minutes, Ivanovitch a dit :

C'est un txt nommé __acme_challenge.ndd.tld ? tu peux le supprimer, car justement il est (sont) normalement crée et détruit durant la procédure de renouvellement

oui c'est un __acme_challenge.ndd.tld.
Et donc il n'est pas supprimé automatiquement puisque je le vois...
La prochaine fois que je vais aller dans ma console de gestion OVH, je le virerais ^^

Posté(e)
Il y a 5 heures, Einsteinium a dit :

Je te dirais sa une fois posté, toujours réduire au max les droits

@Einsteinium si je te dis que je créée un token global avec les droits suivants :

GET /domain/zone
GET /domain/zone/*
DELETE /domain/zone/*
Restricted IPs : xxx.yyy.zzz.ttt (mon ip publique)

Je me fais incendier ou pas ? Je pense que oui et tu auras raison ... Effectivement ça évite de se poser des questions, mais c'est trop large : tu vas me dire qu'il faut limiter explicitement aux domaines (zones) que l'on veut exposer à ce script, et donc prendre individuellement les clés utilisées pour le renouvellement acme .... je vais modifier mon script en conséquence.

Posté(e) (modifié)

bon j'ai une piste qui indiquerai que c'est pas les API ovh qui déconnent mais acme.sh...

quand ça fail, c'est le script qui construit une requête "records of the zone" mal formée de Ia forme

get domain/zone/_acme-challenge.ndd.tld/record?...

au lieu de 

get domain/zone/ndd.tld/record?...

l'api répond du json pour dire que ca n'existe pas (obviously, c'est pas le bon domaine). Le script lui s'attends à l'ID (rid, record id) associé au TXT demandé dans les params du get... il essaye de continuer avec le json au lieu d'un long int sur le call d'après (get record id properties ) et se fait jeter par curl qui lui dit requete mal formée 😄 !

maintenant reste à trouver pourquoi...  si c'est avéré j'irai ouvrir une issue (ou ptet une PR de fix si c'est facile) sur GH 🙂 

bon, peux pas tester plus maintenant, incident let's encrypt 🤣

1.jpg

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

Bonjour,

 

J'ai un soucis au point 2D :

Citation

[Wed Jul 21 20:49:08 UTC 2021] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 6
[Wed Jul 21 20:49:08 UTC 2021] Can not init api for: https://acme-v02.api.letsencrypt.org/directory.
[Wed Jul 21 20:49:08 UTC 2021] Sleep 10 and retry.

 

Pourtant je ping bien cette adresse...

Quelqu'un aurait une idée ?

Merci !

Modifié par axb
Posté(e)

problème de config réseau en dirait, acme.sh arrive pas à contacter l'API LE.

ton nas à bien accès au net ? en ssh dessus, tu peux ping letsencrypt.org ?

sinon un log plus long pourrais aider...

Posté(e)

@Ivanovitch bonjour,

je viens de regarder rapidement mes logs, et je trouve a priori cette action (get /domain/zone/_acme.ndd.tld ...) dans les renouvellements réussis . Je n'ai pas poussé l'étude du log et des messages aussi loin que toi, mais du coup je ne sais pas trop quel est le problème avec ces enregistrements TXT _acme-challenge.

Toujours est'il que si il n'y en a pas au moment de la demande de renouvellement, ca se passe beaucoup mieux.

Curieux de voir le traitement de ta demande de modification.

Posté(e)

Ça explique peut-être pourquoi ces derniers jours je n'ai pas réussi à mettre en place un renouvellement de certificat pour un bureau distant.

J'avais bien "the API call has not been granted". J'ai recommencé 3 fois les accès API pensant que je faisais des erreurs... Je vais suivre tout ça.

Posté(e) (modifié)

ma PR a été mergée dans la branche dev, neil à meme pas posé de question :mrgreen:

donc mon fix sera dispo sur le docker à la prochaine release (merge de dev vers master)

en attendant, si vous avez le problème, la seule solution est d'insister comme un porc sur la requête issue, ça fini par passer...

 

Citation

je viens de regarder rapidement mes logs, et je trouve a priori cette action (get /domain/zone/_acme.ndd.tld ...) dans les renouvellements réussis . Je n'ai pas poussé l'étude du log et des messages aussi loin que toi, mais du coup je ne sais pas trop quel est le problème avec ces enregistrements TXT _acme-challenge.

c'est normal que tu vois des requetes /domain/zone/__acme-challenge.ndd.tld

par contre elles doivent être refusées avec un 403 Unauthorized + "this call has not been granted"

des fois elles ne le sont pas et acme considère que ton domaine est "__acme-challenge.ndd.tld" au lieu de "ndd.tld" et ca fait déconner tout le reste vu que c'est pas le bon domaine 😂

Modifié par Ivanovitch
Posté(e)
il y a 21 minutes, Ivanovitch a dit :

c'est normal que tu vois des requetes /domain/zone/__acme-challenge.ndd.tld

par contre elles doivent être refusées avec un 403 Unauthorized + "this call has not been granted"

des fois elles ne le sont pas et acme considère que ton domaine est "__acme-challenge.ndd.tld" au lieu de "ndd.tld" et ca fait déconner tout le reste vu que c'est pas le bon domaine 

@Ivanovitch effectivement, il y a des fois ou ça passe, ...et de fois ou ça ne passe pas (403) ! J'ai repéré un cas ou c'est passé, et derrière le certificat est bien généré, mais il y a erreur sur la suppression du record TXT _acme-challenge. D'où le fait que ces enregistrements restent à polluer les zones DNS.

Posté(e)

yep, c'est tout à fait ce que je j'observe et décrit dans l'issue github

j'ai testé mon fix comme un porc et y'a plus aucun soucis ni de délivrance du certificat ni de pollution, yay 😄 !

Posté(e)

@Ivanovitch Merci pour ta réponse.

Mon NAS accède bien au net, je peux ping letsencrypt.org en SSH.

Voici ce qui est dans le fichier acme.log :

Citation

[Wed Jul 21 20:09:11 UTC 2021] Running cmd: issue
[Wed Jul 21 20:09:11 UTC 2021] _main_domain='XXXXXXXX.TLD'
[Wed Jul 21 20:09:11 UTC 2021] _alt_domains='*.XXXXXXXX.TLD'
[Wed Jul 21 20:09:11 UTC 2021] Using config home:/acme.sh
[Wed Jul 21 20:09:11 UTC 2021] default_acme_server='https://acme-v02.api.letsencrypt.org/directory'
[Wed Jul 21 20:09:11 UTC 2021] ACME_DIRECTORY='https://acme-v02.api.letsencrypt.org/directory'
[Wed Jul 21 20:09:11 UTC 2021] DOMAIN_PATH='/acme.sh/XXXXXXXX.TLD'
[Wed Jul 21 20:09:11 UTC 2021] Using ACME_DIRECTORY: https://acme-v02.api.letsencrypt.org/directory
[Wed Jul 21 20:09:11 UTC 2021] _init api for server: https://acme-v02.api.letsencrypt.org/directory
[Wed Jul 21 20:09:11 UTC 2021] GET
[Wed Jul 21 20:09:11 UTC 2021] url='https://acme-v02.api.letsencrypt.org/directory'
[Wed Jul 21 20:09:11 UTC 2021] timeout=
[Wed Jul 21 20:09:11 UTC 2021] _CURL='curl --silent --dump-header /acme.sh/http.header  -L '
[Wed Jul 21 20:09:16 UTC 2021] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 6
[Wed Jul 21 20:09:16 UTC 2021] ret='6'
[Wed Jul 21 20:09:16 UTC 2021] Can not init api for: https://acme-v02.api.letsencrypt.org/directory.
[Wed Jul 21 20:09:16 UTC 2021] Sleep 10 and retry.

....

J'ai essayé avec ma ligne mobile. Idem.

J'ai essayé de changer de serveur DNS. Idem.

Voici le résultat de la requète ping letsencrypt.org

Citation

64 bytes from ec2-52-73-153-209.compute-1.amazonaws.com (52.73.153.209) : icmp_seq=1 ttl=41 time=109 ms

Avez-vous une idée ?

Merci!

Posté(e)

si le firewall de ton syno est actif, tu peux essayer de le désactiver temporairement ?

le account.conf, tu l'as bien crée depuis l'éditeur de texte du syno en mode utf-8 ? car si tu l'as crée sur windows, les fin de lignes (caractère invisible cr-lf sur windows vs lf sur linux) peuvent foutre en carafe quand acme le relis. 

sinon, peux-tu paste la sortie de

docker inspect Acme

a call en ssh sur le nas

Posté(e)

tant que j'y pense,

si vous voulez que let's encrypt vous envoie un mail de rappel pour le renouvellement (ça commence à partir de 20 jours de validité restante sur les 90 si on a pas déjà renouvelé) vous pouvez ajouter à votre account.conf avant la première demande de certificat :

ACCOUNT_EMAIL='votre@email.tld'

si vous avez déjà un certificat mis en place par acme (et donc un compte letsencrypt, automatiquement crée lors de la toute première demande), il faut passer la commande (en ssh ou tache planifiée exec unique)

docker exec Acme --update-account --accountemail 'votre@email.tld'

qui doit retourner

 account update success for https://acme-v02.api.letsencrypt.org/acme/acct/xxxxxxxxx

c'est un mécanisme finalement assez utile, ça permet de se rendre compte si le docker déconne 🙂

Posté(e)

Je ne pense pas non, mais tu peux toujours le faire au cas où tu supprimerai le dossier /ca , qui occasionnerai la création d’un nouveau compte Letsencrypt, tu n’aurais alors pas besoin de repasser la commande update-account 😉 

Posté(e)

Yep, faut plutôt voir ça comme un ultime garde-fou (on ne doit recevoir aucun e-mail si le docker marche car il renouvelle à 60 jours, les mails eux ne commencent qu’à 70). L’avantage c’est que c’est indépendant de toute config sur le Nas 🙂 !  

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.