未能续订 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 我编辑了您的问题以删除您不应发布的令牌!但是我的编辑需要同行评审,所以我建议您自己删除令牌,而不是等待评审(放置 --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 - 握手错误
带有 Let's Encrypt 的 Google App Engine SSL“无法插入”