所有 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 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书