所有 SSL 文章 SSL 與憑證

什麼是 ACME 協議?

ACME(Automated Certificate Management Environment,自動證書管理環境)是使免費、自動化 SSL 證書成為可能的協議。它是 Let’s Encrypt——以及你的 ACME 用戶端(GetHTTPSCertbotacme.sh)——與憑證授權機構實際通訊的方式。

定義於 RFC 8555,ACME 用一個完全自動化的、密碼學安全的協議取代了舊的手動流程(透過郵件向 CA 傳送 CSR、等待人工稽核)。

ACME 工作原理——5 個步驟

┌──────────┐                              ┌──────────────┐
│  Client   │  ① Account Registration     │  CA Server   │
│ (GetHTTPS)│ ──────────────────────────→  │ (Let's Encrypt)
│           │  ② New Order (domains)       │              │
│           │ ──────────────────────────→  │              │
│           │  ③ Complete Challenges       │              │
│           │ ←─────────────────────────── │              │
│           │ ──────────────────────────→  │              │
│           │  ④ Finalize (send CSR)       │              │
│           │ ──────────────────────────→  │              │
│           │  ⑤ Download Certificate      │              │
│           │ ←─────────────────────────── │              │
└──────────┘                              └──────────────┘

步驟 1:賬戶註冊

用戶端生成 ACME 賬戶金鑰對並向 CA 註冊公鑰。此金鑰在未來請求中標識你——每條 ACME 訊息都用它簽名。

無需郵件、無需密碼、無需個人資訊。

步驟 2:建立訂單

用戶端提交要獲取證書的域名列表。CA 建立一個”訂單”並返回一組”授權”——每個域名一個——每個授權包含需要完成的驗證。

步驟 3:完成驗證

對於每個域名,用戶端必須證明控制權。CA 提供驗證型別:

驗證方式工作原理使用場景
HTTP-01/.well-known/acme-challenge/ 放置檔案最常見、最簡單
DNS-01_acme-challenge.domain 新增 TXT 記錄萬用字元、無 80 埠
TLS-ALPN-01在埠 443 用特殊 TLS 證書響應80 埠被封、無 DNS 訪問

用戶端完成驗證後通知 CA 來檢查。CA 從其伺服器驗證——如果驗證透過,授權標記為有效。

步驟 4:完成訂單(傳送 CSR)

所有域名授權透過後,用戶端傳送包含證書公鑰的 CSR(證書籤名請求)。CA 簽名並建立證書。

步驟 5:下載證書

用戶端下載簽名的證書鏈——你的證書 + 中間 CA 證書。完成。

ACME 安全模型

每個 ACME 請求都使用賬戶金鑰透過 JWS(JSON Web Signature) 簽名。這防止了:

  • 重放攻擊 —— 每個請求有唯一的 nonce
  • 篡改 —— 簽名覆蓋整個請求體
  • 冒充 —— 只有賬戶金鑰持有者能發起請求

賬戶金鑰永遠不離開用戶端。使用 GetHTTPS 時,它透過 Web Crypto API 在瀏覽器中生成。

GetHTTPS 如何使用 ACME

GetHTTPS 在瀏覽器中執行的 JavaScript 中實現完整的 ACME 協議:

  1. 賬戶金鑰透過 crypto.subtle.generateKey()(Web Crypto API)生成
  2. 證書金鑰以相同方式生成
  3. ACME 訊息透過 crypto.subtle.sign() 簽名
  4. CSR 使用 pkijs 庫構建
  5. 直接與 acme-v02.api.letsencrypt.org 進行 HTTPS 通訊

無伺服器端代理、無中介軟體。你的瀏覽器直接與 Let’s Encrypt 的 ACME API 通訊。這很獨特——大多數 ACME 用戶端執行在伺服器上。

ACME 用戶端對比

用戶端執行環境ACME v2自動續簽語言
GetHTTPS瀏覽器❌ 手動JavaScript
Certbot伺服器 CLIPython
acme.sh伺服器 CLIShell
CaddyWeb 伺服器Go
Traefik反向代理Go
LegoCLI 庫Go

完整對比 →

支援 ACME 的 CA

ACME 由 Let’s Encrypt 建立,但現在是多個 CA 使用的開放標準:

CAACME 目錄 URL免費?
Let’s Encryptacme-v02.api.letsencrypt.org/directory
ZeroSSLacme.zerossl.com/v2/DV90有限免費
Buypassapi.buypass.com/acme/directory
Google Trust Services透過 Google Cloud ACME
DigiCert企業 ACME 端點付費
Sectigo企業 ACME 端點付費

常見問題

ACME 和 Let’s Encrypt 是同一個東西嗎?

不是。ACME 是協議(RFC 8555)。Let’s Encrypt 是使用 ACME 的憑證授權機構。其他 CA(ZeroSSL、Buypass、Google)也支援 ACME。可以類比 HTTP 和 Google——HTTP 是協議,Google 是使用它的服務。

我能實現自己的 ACME 用戶端嗎?

可以。協議完全規範於 RFC 8555。GetHTTPS 是基於瀏覽器的實現示例。大多數語言都有庫(Python 的 certbot、Go 的 lego、JavaScript 的 acme.js)。

什麼是 ACME v2?

ACME v2 是當前版本(RFC 8555),增加了萬用字元證書支援並取代了草案 v1 協議。所有現代 ACME 用戶端使用 v2。Let’s Encrypt 於 2021 年關閉了 v1 端點。

如果 ACME 伺服器宕機會怎樣?

現有證書繼續工作(它們不會回連驗證)。你只是在恢復前無法簽發或續簽。Let’s Encrypt 有高可用性和冗餘基礎設施。

相關文章

SSL 與憑證 2026-05-07
什麼是 Let's Encrypt?
Let's Encrypt 是一個免費的非營利憑證授權機構,已簽發超過 10 億張 SSL 證書。瞭解其工作原理、速率限制,以及如何透過 GetHTTPS 使用。
快速開始 2026-05-08
HTTP-01 驗證:工作原理與操作指南
HTTP-01 是證明域名所有權以獲取 SSL 證書的最簡單方式。在伺服器上放置一個檔案,Let's Encrypt 進行驗證,即可簽發證書。
快速開始 2026-05-08
DNS-01 驗證:工作原理與操作指南
DNS-01 驗證透過在 DNS 中新增 TXT 記錄來證明域名所有權。萬用字元證書必須使用此方式。涵蓋 Cloudflare、Route 53、GoDaddy、Namecheap 等的設定方法。
SSL 與憑證 2026-05-07
SSL/TLS 如何工作:TLS 握手詳解
TLS 握手的視覺化解析——瀏覽器和伺服器如何在毫秒內建立加密連線。涵蓋 TLS 1.2、TLS 1.3、會話恢復和前向保密。
在瀏覽器中取得免費 SSL 憑證
無需安裝,無需帳號。私鑰始終留在你的裝置上。
取得憑證