Let's Encrypt宣布他们有:
开启对 ACME DNS 质询的支持
如何./letsencrypt-auto
使用 DNS 质询域验证生成新证书?
编辑
我的意思是:我如何避免http/https
端口绑定,通过使用新宣布的功能 (2015-01-20),您可以通过在目标域的 DNS 区域中添加特定的 TXT 记录来证明域所有权?
Let's Encrypt宣布他们有:
开启对 ACME DNS 质询的支持
如何./letsencrypt-auto
使用 DNS 质询域验证生成新证书?
编辑
我的意思是:我如何避免http/https
端口绑定,通过使用新宣布的功能 (2015-01-20),您可以通过在目标域的 DNS 区域中添加特定的 TXT 记录来证明域所有权?
目前可以执行 DNS 验证,也可以在手动模式下使用certbot LetsEncrypt 客户端。自动化也是可能的(见下文)。
手动插件
您可以使用手动插件执行手动验证。
然后,Certbot 将向您提供手动更新域的 TXT 记录以继续验证的说明。
更新 DNS 记录后,按 Enter,certbot 将继续,如果 LetsEncrypt CA 验证了质询,则照常颁发证书。
您还可以使用具有更多选项的命令来最小化交互性和回答 certbot 问题。请注意,手动插件尚不支持非交互模式。
更新不适用于手动插件,因为它在非交互模式下运行。官方 certbot文档中的更多信息。
更新:手动挂钩
在新的 certbot 版本中,您可以使用钩子,例如
--manual-auth-hook
,--manual-cleanup-hook
。挂钩是由 certbot 执行以执行任务的外部脚本。信息在环境变量中传递——例如,要验证的域、质询令牌。变量:
CERTBOT_DOMAIN
,CERTBOT_VALIDATION
,CERTBOT_TOKEN
.您可以编写自己的处理程序或使用现有的处理程序。有很多可用的,例如 Cloudflare DNS。
有关官方 certbot hooks 文档的更多信息。
自动化、更新、脚本
如果您想自动化 DNS 质询验证,目前无法使用 vanilla certbot。更新:使用 certbot 钩子可以实现一些自动化。因此,我们创建了一个支持 DNS 自动化脚本的简单插件。它以certbot-external-auth的形式提供。
它支持 DNS、HTTP、TLS-SNI 验证方法。您可以在处理程序模式或 JSON 输出模式下使用它。
处理程序模式
在处理程序模式下,certbot + 插件调用外部挂钩(程序、shell 脚本、Python 等)来执行验证和安装。在实践中,您编写一个简单的处理程序/shell 脚本来获取输入参数 - 域、令牌并在 DNS 中进行更改。处理程序完成后,certbot 照常进行验证。
这为您提供了额外的灵活性,也可以续订。
处理程序模式还与脱水DNS 挂钩(以前的letsencrypt.sh)兼容。已经有许多用于常见提供商的 DNS 挂钩(例如,CloudFlare、GoDaddy、AWS)。在存储库中有一个自述文件,其中包含大量示例和示例处理程序。
脱水DNS 挂钩的示例:
JSON模式
另一种插件模式是 JSON 模式。它每行生成一个 JSON 对象。这可以实现更复杂的集成——例如,当 Ansible 或某些部署管理器调用 certbot 时。通过 STDOUT 和 STDIN 进行通信。Cerbot 生成带有数据的 JSON 对象以执行验证,例如:
DNS 更新后,调用者会将换行符发送到 certbot 的 STDIN,以表明它可以继续验证。
这可以从中央管理服务器实现自动化和证书管理。对于安装,您可以通过 SSH 部署证书。
有关更多信息,请参阅certbot-external-auth GitHub 上的自述文件和示例。
编辑:还有一篇新的博客文章描述了 DNS 验证问题和插件的使用。
编辑:我们目前正在研究 Ansible 两步验证,很快就会关闭。
我能够使用
dehydrated
客户端通过 DNS 验证获取证书。https://github.com/lukas2511/dehydrad
您需要为您的域使用正确的 DNS 验证挂钩,但有几个选项可用作示例:
https://github.com/lukas2511/dehydrad/wiki/Examples-for-DNS-01-hooks
截至今天,官方客户端不支持 DNS-01 挑战类型(尚)。
请参阅https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427
您可以在此 PR上关注进度。或者,有一些客户端已经支持它。
我为letsencrypt.sh客户端编写了一个钩子脚本,允许您对不提供使用api的DNS提供商使用Lets Encrypt DNS验证(也就是需要手动输入和验证)。
你可以在这里查看:https ://github.com/jbjonesjr/letsencrypt-manual-hook
如前面的答案所述,您可以通过 DNS 轻松验证域:
apt-get install -y git ruby letsencrypt git clone https://github.com/lukas2511/dehydrated.git git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb
在尝试了不同的组合之后,这就是我使用脱水和letsencrypt-manual-hook git存储库的方法。如果以下步骤对您有用,请不要忘记为这些存储库加注星标
注意:这是 panticz.de 和 alexcline 答案的补充
您将获得一个哈希(运行上述命令后),在您的 DNS 中创建一个TXT记录。通过运行以下命令或GSuite Toolbox确保它正常工作
现在,在提示符下按回车。尽管更新了 TXT 记录,但这对我不起作用。我不得不按 Ctrl+C 并再次运行该命令。
现在,您的公共和私人证书都在这里。
要续订(最短等待时间为 30 天),只需再次执行相同的命令。
在certbot
--manual-auth-hook
中使用时很容易完成。--manual-cleanup-hook
在哪里
auth.sh
会像和
cleanup.sh
类似的东西前提是您的 dns 服务器已正确配置为允许动态 dns 更新 (RFC2136)。强烈建议使用 TSIG 密钥,但如果您选择不使用它,只需
-k $KEYFILE
在调用nsupdate
.Hugo Landau 在 Go ( https://github.com/hlandau/acme ) 中编写了一个支持 DNS 挑战的 ACME 客户端(使用 BIND 的 nsupdate 协议)。至少 18 个月以来,它一直完美地为我工作。
也许使用certbot的 DNS 插件之一?
对于 macOS