这是我第一次使用 Let's Encrypt ,这个101 个问题很可能已经在某个地方得到解答了,但无论如何,来自https://eff-certbot.readthedocs.io/en/latest/using.html#setting-up-automated-renewal
大多数 Certbot 安装都预配置了自动更新。这是通过
certbot renew
定期运行的计划任务完成的。
因此,为了简化操作,我使用 Certbot docker 容器来获取证书,并且该容器没有预先配置自动更新功能,因此我需要自己启用该功能。
计划的 cron 任务非常简单:
0 0,12 * * * root sleep $SLEEPTIME && certbot renew -q
我的问题是,Let's Encrypt 证书有效期为三个月,但 Certbot 文档中的官方建议说我们需要每 12 小时尝试更新一次。
我觉得这太过分了。有人知道我们多久可以续订吗?(从命令行更新“让我们加密”证书我知道没有--force-renewal
选项)
我的意思是,如果更新可以提前 10 天进行,那么我的 cron 作业可以每 5 天设置一次,如果提前 6 天,我将使用 3。
另外,有人知道certbot renew
在更新确实发生后,是否可以使用的返回代码来通知我的脚本以触发我的 nginx 配置重新加载?
谢谢
啥时候可以续约?
来自他们的常见问题解答(重点是我的)
鉴于他们建议每 60 天续订一次,那么可以安全地假设它们在到期前至少 30 天可以续订。
请注意,系统
certbot
会自动根据系统时钟检查证书的有效期,因此当证书的有效期超过 30 天时,不会拨出任何 API。(参考)它应该多久运行一次?
我会对此保持谨慎,不要将其削减得太小。您可以稍微放慢速度,但请记住,如果 certbot 失败,则不会立即重试(它可能因任何原因随机失败)。您要确保如果失败,它有很多机会在到期前重试并成功。没有人喜欢他们的服务因 TLS/SSL 错误而失败。
触发重新加载:
奇怪的是,这是在 docker 中运行可能稍微复杂一些的事情。运行 nginx config reload 的规范方法是使用部署钩子
--deploy-hook <script>
。在 docker 之外,您只需使用脚本直接触发 nginx 配置重新加载。在 docker 内部,您可能需要编写一个留下标记文件的脚本。然后要求 docker 运行的命令可能是
certbot renew && test -f <marker file>
。其他说明
需要注意的是,将 TLS/SSL 完全移出 nginx 会更简单。traefik和caddy都可以充当未加密 HTTP 后端之上的 HTTPS 网关。它们都原生支持 Letsencrypt,这意味着您无需担心处理证书续订和 HTTPS 服务器配置重新加载……一切都为您完成了。我个人更喜欢 Traefik