certbot - 等待 TXT 记录更新的正确方法是什么?

certbot - 等待 TXT 记录更新的正确方法是什么?

我想用certbot它创建一个通配符认证,运行后certbot ...它会给我一个哈希值,告诉我等到将它放到我的域的 TXT 记录上。

但我无法直接访问我使用的 DNS 服务。我有一些办公室程序来更新 DNS 设置,这需要时间,所以我不能在这里保持 SSH 窗口打开。如果我重新运行certbot,哈希会发生变化,并且会出现同样的问题。

等待 DNS 刷新并保持哈希不变的正确方法是什么?谢谢!

答案1

我发现如果我在挑战之前按下 Ctrl-C(例如按 Enter),哈希值就不会改变。

所以我可以等待 DNS 更新然后重新运行certbot,它会显示相同的哈希值,现在我可以立即按 Enter。

答案2

据我所知,TTL 与 DNS-01 质询无关。看来 Let's Encrypt 会检查哪些服务器是权威的,并直接查询其中一个权威服务器,因此必要的延迟是为了允许区域数据同步到所有权威服务器,而不是等待任何缓存过期(这时 TTL 才有意义)。


话虽如此,但 Let's Encrypt 的预期方式实际上是自动化的,无论您使用 HTTP-01 质询还是 DNS-01 质询。
这样做的主要优点是,只需提前做一点工作,证书就会根据需要自动更新(通过certbot renew定期调用),这对于使这些短期证书可行非常重要。

certbot配有一套用于进行 DNS 更新的插件(并且始终可以选择实施您自己的方案)。

在发布此帖时,插件列表如下:

  • certbot-dns-cloudflare
  • certbot-dns-cloudxns
  • certbot-dns-digitalocean
  • certbot-dns-dnsimple
  • certbot-dns-dnsmadeeasy
  • certbot-dns-google
  • certbot-dns-linode
  • certbot-dns-luadns
  • certbot-dns-nsone
  • certbot-dns-ovh
  • certbot-dns-rfc2136
  • certbot-dns-route53

(查看文档以获取最新列表 + 相关说明的链接)

也就是说,本质上有一个支持 RFC2136 的插件(常规 DNS动态更新,与您可能自己运行的大多数标准 DNS 服务器兼容)+ 一组针对一些主要 DNS 服务提供商的专有 API 的插件。

使用示例:

certbot certonly \
  --dns-rfc2136 \
  --dns-rfc2136-credentials ~/.secrets/certbot/rfc2136.ini \
  -d example.com

这些也有一个参数(名称因插件而异)--dns-rfc2136-propagation-seconds,允许调整完成挑战之前等待的时间(以允许区域数据同步到权威机构)。

答案3

我猜目前没有什么好的方法来实现这一点。

我在第二个终端窗口中保持 certbot 提示符打开以等待,我刚刚运行了示例dig -t txt _acme-challenge.mydomain.com(将 txt 地址替换为您的地址)。当它不再显示;; ANSWER SECTION:该记录的任何 TTL 秒数时,certbot 在按下回车键后成功完成。

如果你仍然需要长时间保持 SSH 连接(在后台),那么也许Linux 屏幕工具方便吗?我用它来运行长时间运行的命令,这些命令可能会有 SSH 超时的危险。只需使用 打开屏幕会话screen -S give_it_a_good_name并在其中运行 certbot 操作即可。然后,您可以使用 断开屏幕连接Ctrl+a d,稍后使用 重新进入屏幕screen -r your_screen_numerical_id,然后会看到提示仍然有效。

请确保稍后以您启动屏幕会话的同一用户身份访问它!例如,如果您以 root 身份启动屏幕会话,那么您就无法在ubuntu任何其他用户下找到它。

答案4

每个 DNS 记录都有一个 TTL 值。您可以将其更改为任何值。您可以将其设置为 60 秒,或者通常保持较高的值,并在更改之前将其设置为较低的值。这样,更改将几乎立即生效。

此外,certbot 还会要求您创建新记录。新记录的传播速度也非常快(几分钟内),因此您实际上不必等待很长时间进行验证。

相关内容