如何使用让我们encryptionDNS挑战validation?

让我们encryption已经宣布他们有:

打开对ACME DNS挑战的支持

我如何制作./letsencrypt-auto使用DNS挑战域validation生成新证书?

编辑
我的意思是:通过使用新发布的function(2015-01-20),可以通过在目标域的DNS区域中添加特定的TXTlogging来certificate域所有权,我该如何避免http/https端口绑定?

    目前,还可以在手动模式下使用certbot LetsEncrypt客户端执行DNSvalidation。 自动化也是可能的(见下文)。

    手动插件

    您可以使用手动插件执行手动validation。

     certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly 

    然后,Certbot会为您提供手动更新域的TXTlogging的指示信息,以便继续进行validation。

     Please deploy a DNS TXT record under the name _acme-challenge.bristol3.pki.enigmabridge.com with the following value: 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc Once this is deployed, Press ENTER to continue 

    一旦你更新了DNSlogging,按回车,certbot将继续,如果LetsEncrypt CAvalidation质询,证书正常发出。

    您也可以使用更多选项的命令来减less交互性并回答certbot问题。 请注意,手动插件尚不支持非交互模式。

     certbot --text --agree-tos --email [email protected] -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default --manual-public-ip-logging-ok certonly 

    手动插件的续订不能在非交互模式下运行。 有关Certbot官方文档的更多信息。

    更新:手动挂钩

    在新的Certbot版本中,可以使用钩子 ,例如--manual-auth-hook ,– --manual-cleanup-hook 。 挂钩是由Certbot执行的外部脚本。

    信息在环境variables中传递 – 例如,要validation的域,质询令牌。 Vars: CERTBOT_DOMAINCERTBOT_VALIDATIONCERTBOT_TOKEN

     certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/dns/authenticator.sh --manual-cleanup-hook /path/to/dns/cleanup.sh -d secure.example.com 

    您可以编写自己的处理程序或使用已有的处理程序,但有许多可用的,例如Cloudflare DNS。

    有关官方Certbot 钩子文档的更多信息

    自动化,续订,脚本

    如果你想自动化DNS挑战validation,目前不能用vanila certbot。 更新:一些自动化可能与Certbot挂钩。

    因此,我们创build了一个简单的插件,支持与DNS自动化脚本。 它以certbot-external-auth的forms提供 。

     pip install certbot-external-auth 

    它支持DNS,HTTP,TLS-SNIvalidation方法。 您可以在处理程序模式或JSON输出模式下使用它。

    处理程序模式

    在处理程序模式下,certbot +插件调用外部钩子(程序,shell脚本,python等)来执行validation和安装。 在实践中,你写一个简单的处理程序/ shell脚本获取input参数 – 域,令牌,并在DNS中进行更改。 当处理程序结束时,certbot像往常一样进行validation。

    这给你一个额外的灵活性,更新也是可能的。

    处理程序模式也与脱水 DNS钩子(以前的letsencrypt.sh)兼容。 常见的提供商已经有很多的DNS钩子(例如,CloudFlare,GoDaddy,AWS)。 在存储库中有一个包含大量示例和示例处理程序的自述文件。

    脱水 DNS钩子示例:

     certbot \ --text --agree-tos --email [email protected] \ --expand --renew-by-default \ --configurator certbot-external-auth:out \ --certbot-external-auth:out-public-ip-logging-ok \ -d "bristol3.pki.enigmabridge.com" \ --preferred-challenges dns \ --certbot-external-auth:out-handler ./dehydrated-example.sh \ --certbot-external-auth:out-dehydrated-dns \ run 

    JSON模式

    另一种插件模式是JSON模式。 它每行产生一个JSON对象。 这可以实现更复杂的集成 – 例如,Ansible或某个部署经理正在调用certbot。 通信通过STDOUT和STDIN来执行。 Cerbot生成带有数据的JSON对象来执行validation,例如,

     certbot \ --text --agree-tos --email [email protected] \ --expand --renew-by-default \ --configurator certbot-external-auth:out \ --certbot-external-auth:out-public-ip-logging-ok \ -d "bristol3.pki.enigmabridge.com" \ --preferred-challenges dns \ certonly 2>/dev/null {"cmd": "perform_challenge", "type": "dns-01", "domain": "bs3.pki.enigmabridge.com", "token": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4", "validation": "ejEDZXYEeYHUxqBAiX4csh8GKkeVX7utK6BBOBshZ1Y", "txt_domain": "_acme-challenge.bs3.pki.enigmabridge.com", "key_auth": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4.tRQM98JsABZRm5-NiotcgD212RAUPPbyeDP30Ob_7-0"} 

    一旦DNS更新,调用者发送新行字符到STDIN的certbot信号,它可以继续进行validation。

    这使中央pipe理服务器能够进行自动化和证书pipe理。 对于安装,您可以通过SSH部署证书。

    有关更多信息,请参阅certbot-external-auth GitHub上的自述文件和示例。

    编辑:还有一个新的博客文章,描述了DNSvalidation问题和插件的使用情况。

    编辑:我们目前正在Ansible 2步validation工作,将很快closures。

    我能够使用dehydrated客户端获得使用DNSvalidation的证书。

    https://github.com/lukas2511/dehydrated

     ./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01 

    您需要为您的域使用正确的DNSvalidation挂钩,但有几个选项可用作示例:

    https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks

    截至今天,官方客户端不支持DNS-01挑战types(还)。

    请参阅https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

    我没有看过这个,所以我不知道。 我的高层理解是“我们的Python客户端不支持DNS挑战”。

    你可以跟随这个PR的进展。 另外,还有一些客户已经支持它。

    我为letsencrypt.sh客户端写了一个钩子脚本 ,允许您使用不提供api使用的DNS提供程序的LetsencryptionDNSvalidation(也就是说,需要手动input和validation)。

    你可以在这里查看: https : //github.com/jbjonesjr/letsencrypt-manual-hook

    正如前面的答案中所提到的,您可以使用以下方法轻松validation域名:

    1. 安装所需的应用程序(在Ubuntu下): 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
    2. 生成www.example.com的手动DNS挑战确authentication书(replace为您的域名): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb