Lets-Encrypt

如何使用 Let’s Encrypt DNS 質詢驗證?

  • June 12, 2021

Let’s Encrypt宣布他們有:

開啟對 ACME DNS 質詢的支持

如何./letsencrypt-auto使用 DNS 質詢域驗證生成新證書?

編輯

我的意思是:如何避免http/https埠綁定,通過使用新宣布的功能 (2015-01-20),讓您通過在目標域的 DNS 區域中添加特定的 TXT 記錄來證明域所有權?

目前可以執行 DNS 驗證,也可以在手動模式下使用certbot LetsEncrypt 客戶端。自動化也是可能的(見下文)。

手動外掛

您可以使用手動外掛執行手動驗證。

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

然後,Certbot 將向您提供手動更新域的 TXT 記錄以繼續驗證的說明。

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

更新 DNS 記錄後,按 Enter,certbot 將繼續,如果 LetsEncrypt CA 驗證了質詢,則照常頒發證書。

您還可以使用具有更多選項的命令來最小化互動性和回答 certbot 問題。請注意,手動外掛尚不支持非互動模式。

certbot --text --agree-tos --email you@example.com -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 執行以執行任務的外部腳本。

資訊在環境變數中傳遞——例如,要驗證的域、質詢令牌。變數:CERTBOT_DOMAIN, CERTBOT_VALIDATION, CERTBOT_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 hooks 文件的更多資訊。

自動化、更新、腳本

如果您想自動化 DNS 質詢驗證,目前無法使用 vanilla certbot。更新:使用 certbot 鉤子可以實現一些自動化。

因此,我們創建了一個支持 DNS 自動化腳本的簡單外掛。它以certbot-external-auth的形式提供。

pip install certbot-external-auth

它支持 DNS、HTTP、TLS-SNI 驗證方法。您可以在處理程序模式或 JSON 輸出模式下使用它。

表演時尚

在處理程序模式下,certbot + 外掛呼叫外部掛鉤(程序、shell 腳本、Python 等)來執行驗證和安裝。在實踐中,您編寫一個簡單的處理程序/shell 腳本來獲取輸入參數 - 域、令牌並在 DNS 中進行更改。處理程序完成後,certbot 照常進行驗證。

這為您提供了額外的靈活性,也可以續訂。

處理程序模式還與脫水DNS 掛鉤(以前的letsencrypt.sh)兼容。已經有許多用於常見提供商的 DNS 掛鉤(例如,CloudFlare、GoDaddy、AWS)。在儲存庫中有一個自述文件,其中包含大量範例和範例處理程序。

脫水DNS 掛鉤的範例:

certbot \
   --text --agree-tos --email you@example.com \
   --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 對像以執行驗證,例如:

certbot \
   --text --agree-tos --email you@example.com \
   --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 更新後,呼叫者會將換行符發送到 certbot 的 STDIN,以表明它可以繼續驗證。

這可以從中央管理伺服器實現自動化和證書管理。對於安裝,您可以通過 SSH 部署證書。

有關更多資訊,請參閱certbot-external-auth GitHub 上的自述文件和範例。

編輯:還有一篇新的部落格文章描述了 DNS 驗證問題和外掛的使用。

編輯:我們目前正在研究 Ansible 兩步驗證,很快就會關閉。

引用自:https://serverfault.com/questions/750902