我想用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 还会要求您创建新记录。新记录的传播速度也非常快(几分钟内),因此您实际上不必等待很长时间进行验证。