![重复使用 letsencrypt DNS 质询](https://linux22.com/image/681658/%E9%87%8D%E5%A4%8D%E4%BD%BF%E7%94%A8%20letsencrypt%20DNS%20%E8%B4%A8%E8%AF%A2.png)
使用 letsencrypt,证书必须每 90 天更新一次。每次更新证书时,都必须再次证明证书中包含的域名的所有权。
可以通过添加_acme-challenge
DNS 记录来实现。是否可以在第一次用于验证时设置此 DNS 记录,并在后续验证中重复使用它,这样就不必在每次需要续订证书时设置新的 DNS 记录?
答案1
重复使用相同的质询在加密上是不安全的。
如果重复使用,任何人都可以获得您的域名的证书,因为“正确”的数据已经存在了!
这就是为什么每次都会发出新的挑战。
答案2
想象一下:
- 您已验证域名 xyz.com 并将其绑定到您的 ACME 帐户。
- 域名上启用了隐私保护 - 这意味着,通常在同一注册表(例如 GoDaddy.com)上启用此功能的所有域名在域名的 whois 上具有相同的联系人。
- 有一天,您决定不想续订此域名或错过了到期日期和后续续订的宽限期。
- 有人新注册了此域名,启用了隐私保护。
在这种绑定情况下,此人现在无法对此域名使用 Letsencrypt,因为它已绑定到您的 ACME 帐户。
这个人现在必须将文件等发送给 ACME。他们需要检查这些文件,需要与您取得联系,以便您有机会做出反应(最终可能是欺诈行为)。这会给所有相关人员带来大量工作。新域名所有者、letsencrypt - 以及 - 可能还有您(如果这真的是欺诈行为)。免费服务如何证明这种努力是合理的?同时 - 新的合法所有者 - 仍然无法使用 Letsencrypt 获取证书,这都是因为缺少重新验证 - 虽然存在一些选项,但您甚至不必手动进行此验证(见下文)。
这会造成巨大的混乱。Lets encrypt 可以相对简单地创建证书,但这并不意味着无需验证。每次订购证书时,都必须进行验证。您可以让事情变得容易得多,例如,对所有子域使用 CName,甚至对指向主 DNS 区域的辅助域使用 CName,以便只在一个地方而不是 x 个地方更改记录,您甚至可以使用 DNS 区域管理服务(例如 Cloudflare)的 API 来自动化该过程,将其与 ACME api 相结合 - 并自动化从更改记录到获取证书的整个过程 - 并且,如果您的基础设施允许 - 甚至可以在本地替换证书。
甚至还有很棒的免费软件 GUI / Cli 可用于此目的,一旦设置,它们就会代表您进行更新,其中一些甚至可以在本地替换证书。只需确保在向其提供所有服务的访问凭据之前使用受人尊敬/经过检查的客户端即可。
就我个人而言,我使用 DNS 区域管理服务中的 REST API 和 ACME Rest API 来自动更新所有证书,自动更改 IIS 域绑定,将相应的证书添加到每个员工计算机的证书存储中 - 更新数据库中的指纹(用于第二层客户端验证) - 最后,只需几百行相对简单的代码。
经常被推荐的客户端(命令行)是 CERTBot。我过去使用过的 GUI 客户端是:CertifyTheWeb。但我已经有一段时间没用过它们了,所以在使用前请(再次)研究一下。