Bonjour à tous. Mon certificat LetsEncrypt a expiré récemment, le 4, et toutes les tentatives pour le renouveler ont échoué. J’ai lu pas mal de posts ici de personnes ayant des problèmes similaires, mais aucune de ces solutions (reconstruction du conteneur, exécution de commandes de renouvellement manuelles, etc.) n’a fonctionné pour moi.
En suivant la section de dépannage du guide, j’ai découvert une erreur dans mes logs (./launcher logs app) :
[Fri Dec 6 05:30:05 PM UTC 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Fri Dec 6 05:30:05 PM UTC 2024] Multi domain='DNS:discourse.[DOMAIN1].org,DNS:discourse.[DOMAIN1].org,DNS:[DOMAIN2].org'
[Fri Dec 6 05:30:05 PM UTC 2024] Getting domain auth token for each domain
[Fri Dec 6 05:30:07 PM UTC 2024] Getting webroot for domain='discourse.[DOMAIN1].org'
[Fri Dec 6 05:30:08 PM UTC 2024] Getting webroot for domain='discourse.[DOMAIN1].org'
[Fri Dec 6 05:30:08 PM UTC 2024] Getting webroot for domain='[DOMAIN2].org'
[Fri Dec 6 05:30:08 PM UTC 2024] Verifying: discourse.[DOMAIN1].org
[Fri Dec 6 05:30:08 PM UTC 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Dec 6 05:30:12 PM UTC 2024] Pending, The CA is processing your order, please just wait. (2/30)
[Fri Dec 6 05:30:15 PM UTC 2024] Pending, The CA is processing your order, please just wait. (3/30)
[Fri Dec 6 05:30:19 PM UTC 2024] Pending, The CA is processing your order, please just wait. (4/30)
[Fri Dec 6 05:30:22 PM UTC 2024] Success
[Fri Dec 6 05:30:22 PM UTC 2024] Verifying: discourse.[DOMAIN1].org
[Fri Dec 6 05:30:23 PM UTC 2024] Success
[Fri Dec 6 05:30:23 PM UTC 2024] Verifying: [DOMAIN2].org
[Fri Dec 6 05:30:23 PM UTC 2024] Pending, The CA is processing your order, please just wait. (1/30)
[Fri Dec 6 05:30:27 PM UTC 2024] [DOMAIN2].org:Verify error:198.49.23.145: Invalid response from http://[DOMAIN2].org/.well-known/acme-challenge/ohJAvgwBR81O8qmzsMPx-ZnmxoKOPAfuGCz0VZJeFWk: 404
[Fri Dec 6 05:30:27 PM UTC 2024] Please check log file for more details: /shared/letsencrypt/acme.sh.log
CN = discourse.[DOMAIN1].org
error 10 at 0 depth lookup: certificate has expired
error fullchain.cer: verification failed
Tout d’abord, pourquoi deux domaines apparaissent-ils ici ? Je n’ai besoin d’un certificat que sur DOMAIN1, le domaine où se trouve notre instance Discourse. DOMAIN2 est notre hôte de relais SMTP et possède déjà un certificat.
Ensuite, le fichier journal LetsEncrypt mentionné (/shared/letsencrypt/acme.sh.log) n’existe pas, ou du moins je ne le trouve pas à l’emplacement indiqué.
Plus important encore, existe-t-il un moyen de faire en sorte que le script arrête de regarder DOMAIN2 et renouvelle simplement le certificat sur DOMAIN1 avec succès ?
Nous fonctionnons sur une instance Digital Ocean, installée à l’aide de leur script, mais il semble que ce soit toujours ce que vous considéreriez comme une installation standard. Cloudflare gère le DNS, mais le nuage orange est désactivé. Il n’y a pas de proxy inverse dont je sois au courant.
Correct. Cette adresse IP appartient à [DOMAIN2], un autre domaine que nous possédons et qui n’a rien à voir avec Discourse, ce qui me ramène à ma question initiale : pourquoi ce domaine et cette adresse IP apparaissent-ils dans les journaux ?
Le DNS fonctionne correctement. Je peux toujours accéder au site en contournant l’avertissement du navigateur concernant le certificat expiré. Notre autre site Web, qui n’est pas Discourse, fonctionne également très bien. Notre nom d’hôte (celui de Discourse, pas l’autre) est discourse.gomomentum.org.
Ce fut difficile ! Je n’arrivais pas à trouver une raison pour laquelle let’s encrypt se connectait au mauvais hôte. Il s’avère que ce n’est pas toujours le DNS.
tl;dr : Vous avez dit à let’s encrypt d’obtenir des certificats pour votre domaine nu en plus de celui de Discourse, et vous avez plus tard changé le DNS du domaine nu pour qu’il pointe vers votre autre site.
Et la version plus longue…
Un jour, vous avez voulu que Discourse gère les requêtes non seulement pour discourse.gomomentum.org mais aussi pour gomomentum.org, vous avez donc ajouté une section à votre app.yml comme décrit ici : Set up Let’s Encrypt with multiple domains / redirects
Ainsi, les requêtes let’s encrypt ont vérifié que les deux domaines pointaient initialement vers votre serveur Discourse.
Cela explique pourquoi ces requêtes pour UN AUTRE DOMAINE se connectaient à let’s encrypt.
Puis, un autre jour, probablement des années plus tard, mais dans les 3 derniers mois, quelqu’un a décidé que gomomentum.org devait pointer vers votre site principal et non plus vers le site Discourse. Et à ce moment-là, let’s encrypt a cessé de fonctionner, mais les certificats durent 3 mois, donc au moment où cela s’est produit, il était presque impossible de relier le changement DNS à l’échec de ce renouvellement de certificat.
J’ai supprimé cette section de votre app.yml et j’ai reconstruit, et vous êtes de retour en activité !
:face_palm: En effet, je m’en souviens maintenant, j’ai beaucoup tripoté les trucs de domaine quand j’avais des problèmes d’e-mail il y a quelques mois. Cela semble être un effet secondaire involontaire de toutes les conjectures que j’ai faites à l’époque. Merci, Jay !