LetsEncrypt 证书未续订

大家好。我的 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 的证书?

1 个赞

这是标准安装吗?您有反向代理吗?

我们运行在一个 Digital Ocean 实例上,使用他们的脚本安装,但似乎这仍然是你们所认为的标准安装。Cloudflare 正在管理 DNS,但橙色云已关闭。据我所知,不存在反向代理。

1 个赞

该 IP 地址不是 discourse。您的 DNS 是否已损坏?您是否有多个 A 记录?

您的主机名是什么?

正确。该 IP 地址属于 [DOMAIN2],这是我们拥有的另一个域,与 Discourse 没有任何关系,这回到了我最初的问题,为什么该域和 IP 会出现在日志中?

DNS 工作正常。如果我绕过浏览器关于证书过期的警告,我仍然可以访问该网站。我们的其他非 Discourse 网站也运行正常。我们的主机名(Discourse 的那个,不是另一个)是 discourse.gomomentum.org

1 个赞

这真是一个棘手的问题!我一直找不到让 Let’s Encrypt 连接到错误主机的理由。结果发现,总是 DNS 的问题。

tl;dr:您告诉 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。

然后,又有一天,可能是在几年后,但在过去 3 个月内的某个时间,有人决定 gomomentum.org 应该指向您的主网站而不是 Discourse 网站了。就在那时,Let’s Encrypt 开始出现问题,但证书的有效期为 3 个月,所以当这种情况发生时,几乎不可能将 DNS 更改与此证书续订失败联系起来。

我从您的 app.yml 中删除了那个节并进行了重建,您现在又恢复正常了!

3 个赞

:man_facepalming: 没错,我记起来了,几个月前我处理 电子邮件问题 时,我曾对域名进行过很多操作。这似乎是我当时胡乱尝试的意外副作用。谢谢你,Jay!

1 个赞