未能续订 Let's Encrypt SSL

Posted

技术标签:

【中文标题】未能续订 Let\'s Encrypt SSL【英文标题】:Failing to renew Let's Encrypt SSL未能续订 Let's Encrypt SSL 【发布时间】:2016-09-06 04:50:51 【问题描述】:

我第一次轻松安装了 SSL 证书,但无法更新。

我安排终端命令每月自动更新证书,但它响应错误。手动运行时我也得到相同的响应。

终端命令

curl -X POST https://forge.laravel.com/api/servers/<serverNumber>/sites/<siteNumber>/ssl/renew?api_token=<my-token>

回应

Cloning into 'letsencrypt1462928414'...
nginx stop/waiting
nginx start/running, process 10734
# INFO: Using main config file /root/letsencrypt1462928414/config.sh
+ Generating account key...
+ Registering account key with letsencrypt...
Processing donniebrandt.com with alternative names: www.donniebrandt.com
 + Signing domains...
 + Creating new directory /root/letsencrypt1462928414/certs/donniebrandt.com ...
 + Generating private key...
 + Generating signing request...
 + Requesting challenge for donniebrandt.com...
 + Requesting challenge for www.donniebrandt.com...
 + Responding to challenge for donniebrandt.com...
ERROR: Challenge is invalid! (returned: invalid) (result: "type":"http-01","status":"invalid","error":"type":"urn:acme:error:unauthorized","detail":"Invalid response from http://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0 [104.18.50.184]: 526","uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/S6oIx5ZFyzu80fkpjoCcAgVDp7p8aLo6UGLLt7flP-g/81801388","token":"JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","keyAuthorization":"JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0.0N_sDHF2rXqfyPHGi4ZmXDAkrmwbMJ-S_ZghYPtSN2g","validationRecord":["url":"http://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","hostname":"donniebrandt.com","port":"80","addressesResolved":["104.18.50.184","104.18.51.184"],"addressUsed":"104.18.50.184","url":"https://donniebrandt.com/.well-known/acme-challenge/JdG5PtzEcqZMMDVhx2VNN5Wmvldwtl84B6q3j1AQcP0","hostname":"donniebrandt.com","port":"443","addressesResolved":["104.18.50.184","104.18.51.184"],"addressUsed":"104.18.50.184"])

我还验证了.well-known/acme-challenge目录存在,但并没有改变错误。

【问题讨论】:

你到底在通过 cron 运行什么命令?您是否在请求续订之前停止了 NGINX 服务?证书有效期为 90 天,续订仅在到期后 30 天内可用。您是否使用--force-renewal 标志来绕过此限制? 发布你用来更新的命令(以及用来颁发证书的命令) 抱歉,我的回复延迟了。 @JrBenito我已经在问题描述中添加了更新命令,但我不知道初始发布的命令,因为它是由 Forge 自动执行的。 @maiorano84 我没有关闭 NGINX 或使用 --force-renewal。我会尝试这些并发布结果。 @Donnie 我编辑了您的问题以删除您不应发布的令牌!但是我的编辑需要同行评审,所以我建议您自己删除令牌,而不是等待评审(放置 )。另一个建议是在 api 服务器上撤销这个令牌并发布一个新的,因为就像我看到的那样,其他人可能也有。 @maiorano84 我停止了 NGINX 并添加了 --force-renewal 标志 is unknown。我删除了标志并得到了与以前相同的错误。 【参考方案1】:

错误消息显示您的网站在某个域中处于离线状态:

ERROR: [...]"Invalid response from http://donniebrandt.com/[...]526",[...]

尝试访问http://donniebrandt.com,你会得到错误526(无效的SSL证书)。

作为cloudfarestates:

当 CloudFlare 无法成功验证源 Web 服务器上的 SSL 证书并且网站上的 CloudFlare SSL 配置设置为“Full SSL (Strict)”时,会出现 HTTP 错误响应代码 526。

换句话说,您在服务器前面设置的 CDN 尝试通过 HTTPS 访问您的服务器,但是您的 SSL 证书无效(可能已过期或 Cloudfare CDN 不信任根 CA)。 因此 Cloudfare 不会从您的服务器获取内容。

我不熟悉 Cloudfare,但您可以执行以下操作之一:

在 Cloudfare 中禁用临时严格 SSL,直到您续订证书,并且下次在证书过期之前续订,因此无需再次禁用它。 暂时将您的 DNS 直接重定向到您的服务器而不是 CDN,更新证书并再次重定向。不利的一面是,DNS 传播可能需要一些时间,并且您会在很长一段时间内失去 CDN 的优势,具体取决于 DNS 设置。

既然你说你第一次让 SSL 工作,我假设 Cloudfare 信任 LetsEncrypt(或者它不会第一次工作)。不过值得一试。

【讨论】:

【参考方案2】:

这并不是真正的解决方案,但我通过在 Forge 中重新创建站点并重新安装 SSL 来绕过这个问题。

这应该不再是问题,因为 Forge 现在可以更好地处理 SSL。

Forge 现在会自动为您续订 LetsEncrypt 证书 每周。您不再需要手动将计划作业添加到 执行续订。生成自动续订 LetsEncrypt 证书,只需使用 上面的表格。

【讨论】:

以上是关于未能续订 Let's Encrypt SSL的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Service Fabric 配置 Let's Encrypt 证书?

设置 Let's encrypt with Go - 握手错误

Java 是不是支持 Let's Encrypt 证书?

带有 Let's Encrypt 的 Google App Engine SSL“无法插入”

如何在没有交互的情况下安装 Certbot (Let's Encrypt)?

在 Docker 映像中创建 Let's Encrypt 证书和 Certbot