Всем привет. Мой сертификат LetsEncrypt истёк недавно, 4-го числа, и все попытки его продления завершились неудачей. Я прочитал довольно много постов здесь от людей с похожими проблемами, но ни одно из предложенных решений (пересборка контейнера, выполнение команд ручного продления и т.д.) не сработало для меня.
Следуя разделу устранения неполадок в руководстве, я обнаружил ошибку в логах (./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
Во-первых, почему здесь отображаются два домена? Мне нужен сертификат только для DOMAIN1 — домена, на котором размещён наш экземпляр Discourse. DOMAIN2 — это наш SMTP-релей, и у него уже есть сертификат.
Во-вторых, упомянутый файл журнала LetsEncrypt (/shared/letsencrypt/acme.sh.log) не существует, или, по крайней мере, я не могу найти его по указанному пути.
Самое главное: есть ли способ заставить скрипт перестать проверять DOMAIN2 и успешно продлить сертификат только для DOMAIN1?
Мы работаем на Droplet от Digital Ocean, установленном с помощью их скрипта, но, похоже, это всё ещё стандартная установка, которую вы считаете таковой. DNS управляется через Cloudflare, но оранжевое облако отключено. Обратного прокси, насколько мне известно, нет.
Верно. Этот IP-адрес принадлежит [DOMAIN2] — другому домену, который нам принадлежит и не имеет никакого отношения к Discourse. Это возвращает меня к моему первоначальному вопросу: почему этот домен и IP-адрес вообще появляются в логах?
DNS работает корректно. Я всё ещё могу получить доступ к сайту, если проигнорирую предупреждение браузера о истёкшем сертификате. Наш другой сайт, не связанный с Discourse, также работает без проблем. Наш хостнейм (тот, что относится к Discourse, а не к другому домену) — discourse.gomomentum.org.
Это был непростой случай! Мне просто не удавалось найти причину, по которой Let’s Encrypt обращался не к тому хосту. Оказалось, что дело не всегда в DNS.
Коротко: вы попросили Let’s Encrypt получить сертификаты не только для домена Discourse, но и для вашего основного домена, а позже изменили DNS-записи основного домена так, чтобы они указывали на другой сайт.
А теперь подробнее . . .
Однажды вы захотели, чтобы Discourse обрабатывал запросы не только для discourse.gomomentum.org, но и для gomomentum.org, поэтому добавили соответствующий блок в файл app.yml, как описано здесь: Set up Let’s Encrypt with multiple domains / redirects
Таким образом, запросы Let’s Encrypt проверяли, что оба этих домена изначально указывали на ваш сервер Discourse.
Это объясняет, почему запросы для ДРУГОГО ДОМЕНА направлялись в Let’s Encrypt.
Затем, возможно, спустя годы, но в любом случае в последние три месяца, кто-то решил, что gomomentum.org должен вести на ваш основной сайт, а не на сайт Discourse. В этот момент Let’s Encrypt перестал работать, но сертификаты действуют три месяца, поэтому к моменту возникновения проблемы было практически невозможно связать изменение DNS с неудачным обновлением сертификата.
Я удалил этот блок из вашего файла app.yml, выполнил пересборку, и всё снова работает!
Действительно, я вспомнил: несколько месяцев назад, когда у меня были проблемы с почтой, я много возился с настройками домена. Похоже, это непреднамеренный побочный эффект всех моих догадок того времени. Спасибо, Джей!