所有入門指南 快速開始

DNS-01 驗證:工作原理與操作指南

DNS-01 是支援萬用字元證書*.example.com)的 ACME 驗證型別。它透過在 DNS 中新增 TXT 記錄來證明域名所有權 — 不需要 Web 伺服器或 80 埠訪問許可權。

工作原理

  1. Let’s Encrypt 為每個域名提供一個 token
  2. GetHTTPS 對 key authorization 計算 SHA-256 摘要並進行 base64url 編碼
  3. 你在 _acme-challenge.yourdomain.com 建立一條 TXT 記錄,值為該編碼結果
  4. Let’s Encrypt 透過公共 DNS 查詢該 TXT 記錄
  5. 如果值匹配,驗證透過,證書即被簽發

使用 GetHTTPS 時,第 1-2 步自動完成 — 你只需將記錄名稱和值複製貼上到 DNS 服務商中。

分步設定

第一步:從 GetHTTPS 獲取 TXT 記錄資訊

GetHTTPS 會顯示:

  • 記錄名稱_acme-challenge.yourdomain.com
  • 記錄值:一個 base64url 編碼的字串(約 43 個字元)

第二步:在 DNS 服務商新增 TXT 記錄

欄位
型別TXT
名稱_acme-challenge(某些服務商會自動追加域名)
GetHTTPS 顯示的字串 — 直接複製貼上
TTL60 秒(或服務商允許的最低值)

各服務商操作說明:

Cloudflare

  1. Dashboard → 你的域名 → DNSRecordsAdd record
  2. Type: TXT,Name: _acme-challenge,Content: 貼上值
  3. TTL: Auto
  4. 點選 Save

AWS Route 53

  1. Hosted zones → 你的域名 → Create record
  2. Record name: _acme-challenge
  3. Record type: TXT
  4. Value: "paste-value-here"(必須包含雙引號 — Route 53 要求如此)
  5. TTL: 300
  6. 點選 Create records

GoDaddy

  1. DNS ManagementAdd
  2. Type: TXT,Name: _acme-challenge,Value: 貼上值
  3. TTL: 1 Hour(最低可選值)
  4. 點選 Save

Namecheap

  1. Domain ListManageAdvanced DNSAdd new record
  2. Type: TXT,Host: _acme-challenge,Value: 貼上值
  3. TTL: Automatic
  4. 點選 Save all changes

Google Cloud DNS

gcloud dns record-sets create _acme-challenge.yourdomain.com. \
  --zone=your-zone --type=TXT --ttl=60 --rrdatas="the-value"

DigitalOcean

  1. NetworkingDomains → 你的域名 → Add record
  2. Type: TXT,Hostname: _acme-challenge,Value: 貼上值
  3. TTL: 30

第三步:等待 DNS 傳播

DNS 變更需要 1-15 分鐘,具體取決於服務商和 TTL 設定。GetHTTPS 的預檢功能會在提交給 Let’s Encrypt 之前驗證 TXT 記錄是否已從公網可見。

手動檢查傳播狀態:

dig TXT _acme-challenge.yourdomain.com +short
# Should return your value (in quotes)

你也可以使用線上傳播檢測工具檢視記錄是否在全球可見。

第四步:在 GetHTTPS 中驗證

點選 Verify。GetHTTPS 將向 Let’s Encrypt 提交驗證請求。如果 TXT 記錄正確,證書即被簽發。

第五步:清理

證書籤發後,刪除 DNS 中的 _acme-challenge TXT 記錄。它不再需要,殘留的過期記錄可能在續簽時造成混淆。

使用 DNS-01 獲取萬用字元證書

要獲取 *.yourdomain.com 的證書,必須使用 DNS-01。HTTP-01 無法驗證萬用字元,因為萬用字元涵蓋無限個主機名 — 不存在一臺伺服器能放置檔案。

萬用字元 + 裸域名: 如果你同時需要 *.example.comexample.com,GetHTTPS 可能需要兩次驗證。某些情況下需要在 _acme-challenge.example.com 同時存在兩條 TXT 記錄 — 一條用於萬用字元,一條用於裸域名。兩條記錄都保留到驗證透過為止。

萬用字元證書完整指南 →

DNS-01 與 HTTP-01 對比

DNS-01HTTP-01
操作內容在 DNS 中新增 TXT 記錄在伺服器上放置檔案
所需許可權域名 DNS 設定Web 伺服器檔案系統
埠要求80 埠必須開放
萬用字元支援✅ 萬用字元必須使用
無伺服器時可用
速度1-15 分鐘(DNS 傳播)即時(檔案可訪問的前提下)
CDN 後是否可用✅ 始終可用⚠️ 可能需要繞過 CDN
最適合萬用字元、無伺服器、CDN 場景大多數單域名證書

選擇 DNS-01 的場景: 需要萬用字元、80 埠被封、伺服器不在公網、或在 CDN 後面。

選擇 HTTP-01 的場景: 有 Web 伺服器、80 埠開放、不需要萬用字元。速度更快(無需等待傳播)。

故障排除

GetHTTPS 找不到 TXT 記錄

  • 多等一會 — 某些服務商需要 5-15 分鐘。低 TTL 有幫助但不能完全消除傳播時間。
  • 檢查記錄名稱: 某些服務商會自動追加域名。如果你輸入了 _acme-challenge.example.com 而服務商又追加了 .example.com,實際記錄會變成 _acme-challenge.example.com.example.com(錯誤)。只輸入 _acme-challenge,讓服務商自動追加。
  • 手動驗證:
    dig TXT _acme-challenge.yourdomain.com +short
    如果返回空,說明記錄還未傳播。

值錯誤 / 大小寫不匹配

  • 值是區分大小寫的。直接從 GetHTTPS 複製貼上 — 不要手動重新輸入。
  • 除非 DNS 服務商要求(如 Route 53),否則不要新增引號。

多條 TXT 記錄衝突

  • 新增新記錄前,刪除之前嘗試留下的舊 _acme-challenge TXT 記錄。
  • 例外:萬用字元 + 裸域名驗證可能需要同一名稱下同時存在兩條記錄。

DNS 服務商不支援 TXT 記錄

少見,但某些基礎 DNS 服務缺少 TXT 支援。換用功能完整的 DNS 服務商(Cloudflare 免費版支援所有記錄型別)。

何時使用 DNS-01

場景適合 DNS-01?
萬用字元證書(*.example.com✅ 必須使用
80 埠被封✅ 最佳選擇
伺服器在內網✅ 唯一選擇
在 Cloudflare/CDN 代理後面✅ 避免代理問題
域名沒有伺服器(停放、重新導向)✅ 唯一選擇
有伺服器的簡單單域名證書⚠️ HTTP-01 更快

常見問題

能自動化 DNS-01 驗證嗎?

可以,透過命令列工具。acme.sh 內建了 150+ DNS 服務商的 API 整合 — 可以自動新增和刪除 TXT 記錄。Certbot 也支援主流服務商的 DNS 外掛。GetHTTPS 需要手動修改 DNS(基於瀏覽器,不呼叫 API)。

把 DNS API 金鑰給 ACME 用戶端安全嗎?

API 金鑰對你的 DNS 區域有寫許可權,應當像對待伺服器憑據一樣重視。儘可能使用作用域受限的 API token(如 Cloudflare 的按區域 token)。為了最大安全性,使用 GetHTTPS 手動修改 DNS — 不涉及任何 API 金鑰。

TXT 記錄需要保留多久?

僅在驗證期間需要 — 通常幾分鐘。證書籤發後即可刪除。續簽時會建立新的記錄和新的值。

DNS 服務商傳播很慢怎麼辦?

將 TTL 設定為服務商允許的最低值(理想情況為 60 秒)。如果傳播超過 15 分鐘,檢查記錄名稱/值是否有拼寫錯誤,或換用其他 DNS 服務商。Cloudflare 的 TXT 記錄傳播通常在幾秒內完成。

DNS-01 在 Cloudflare 代理(橙色雲朵)下可用嗎?

可以。DNS-01 驗證透過 DNS 查詢 TXT 記錄,而非 HTTP — 因此 Cloudflare 代理狀態(橙色或灰色雲朵)無關緊要。這是相比 HTTP-01 的關鍵優勢,後者可能被代理阻斷。

相關文章

快速開始 2026-05-08
如何獲取免費 SSL 證書(分步指南)
5 分鐘從 Let's Encrypt 獲取免費 SSL 證書 — 無需安裝軟體、無需註冊賬號。涵蓋 4 種方法、兩種驗證方式、6 個平臺的安裝教程和故障排除。
快速開始 2026-05-08
HTTP-01 驗證:工作原理與操作指南
HTTP-01 是證明域名所有權以獲取 SSL 證書的最簡單方式。在伺服器上放置一個檔案,Let's Encrypt 進行驗證,即可簽發證書。
快速開始 2026-05-07
如何免費獲取萬用字元 SSL 證書
使用 GetHTTPS 從 Let's Encrypt 免費獲取萬用字元 SSL 證書 (*.example.com)。僅需 DNS-01 驗證。涵蓋 Cloudflare、Route 53、GoDaddy 和 Namecheap DNS 設定。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證