#https://letsencrypt.org/zh-tw/docs/challenge-types/
這個考驗會請你在網域的 TXT 紀錄中,放一段特定的文字,來證明你擁有此網域的 DNS 控制權。DNS-01 的設定步驟會比 HTTP-01 困難,但是它可以在 HTTP-01 無法使用的情況下完成驗證。它也允許你申請萬用憑證。
在 Let’s Encrypt 給予 ACME 客戶端 token 後,客戶端會拿 token 與帳號金鑰進行運算,並產生一段文字,請將這段文字利用 TXT 紀錄放在 DNS 的主機名稱 _acme-challenge.
我們認為自動化申請和更新憑證非常重要,只有當你的 DNS 業者有提供 API 讓你自動更新憑證時,使用 DNS-01 才有意義。我們的社群整理了一份有提供 API 的 DNS 業者清單。你的 DNS 業者可能與你註冊網域業者(你購買網域的公司)是同一家,但也有可能不一樣。如果你想要更換你的 DNS 業者,你只需要在網域註冊商的 DNS 紀錄中做一點變更,而不需要等待你的網域名稱到期。
請注意,將開啟所有權限的 API 金鑰放在網頁伺服器上,如果伺服器被駭客攻擊,可能會造成嚴重的後果。最好的做法是,使用限制權限的 API 金鑰,或是在不同的伺服器上執行 DNS 驗證後,再將憑證複製到你的網頁伺服器。
因為 Let’s Encrypt 在搜尋用於 DNS-01 的 TXT 紀錄時遵循 DNS 標準,你可以使用 CNAME 紀錄或是 NS 紀錄,藉由指派 _acme-challenge 子域名給其他專門用來回應驗證的 DNS。如果你的 DNS 服務商更新紀錄的速度很慢,那麼你也可以使用這個方法,把驗證工作指派給其他速度較快的 DNS。
大部分的 DNS 業者會有"更新時間",這個時間的長短會決定你的 DNS 紀錄要花多久才會被所有伺服器更新。這個時間很難估算,因為他們通常使用任播 (anycast) 的方式,這表示很多伺服器擁有同一個 IP 位置。根據你在世界上不同的位置,你可能會和不同的 Let’s Encrypt 伺服器溝通(並得到不同回應)。最好的情況是 DNS API 為你提供了自動檢測更新是否完成。如果你的 DNS 業者沒有提供這種 API,你只需要將 ACME 客戶端 等待一段的時間(通常超過一小時)來確保在觸發驗證前 DNS 紀錄已經完全更新。
你可以在 DNS 紀錄上為網域名稱提供多個 TXT 紀錄。例如:你想同時驗證萬用憑證和非萬用憑證。需要注意的是,要確保舊的 TXT 紀錄已經被清除,如果回應資料太多,Let’s Encrypt 將會拒絕驗證。
優點:
你可以申請頒發萬用憑證
能替你驗證多個網頁伺服器
缺點:
把 API 金鑰在你的網頁伺服器上會有安全疑慮
你的 DNS 業者可能沒有提供 API
你的 DNS 業者的 API 可能沒有提供 DNS 更新時間的資訊