如何使用 Let’s Encrypt DNS 質詢驗證?
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 兩步驗證,很快就會關閉。