术语表

EAB (外部账户绑定)

最后核实

定义

EAB 即外部账户绑定,是 ACME 的一项功能,用 CA 提供的密钥 ID 和 HMAC 密钥把新 ACME 账户关联到你在该 CA 的已有客户账户。

EAB(External Account Binding,外部账户绑定)定义在 RFC 8555 第 7.3.4 节。CA 通过网站或 API 给你一个密钥标识(kid)和一个 MAC 密钥。ACME 客户端注册账户时,额外附带一段用该 MAC 密钥对新账户公钥签名的 JWS,证明这次注册是由已知客户授权的。注册完成后 ACME 账户照常使用,之后每次下单都不再需要 EAB。

为什么重要

Let's Encrypt 不要求 EAB,但许多其他 ACME CA 要求,因为它们需要把证书与计费账户、已验证的组织身份或滥用管控关联起来。例如 ZeroSSL、Google Trust Services 和 SSL.com 都要求先提供 EAB 凭据才能创建 ACME 账户。EAB 也是 OV 证书实现自动化的方式:组织身份在 CA 控制台验证一次,之后由 ACME 负责域名验证和续期。国内常用的 acme.sh 默认 CA 是 ZeroSSL,首次使用时执行 acme.sh --register-account -m my@example.com,它会用邮箱自动获取 EAB 凭据。

例子

# Certbot 对接要求 EAB 的 CA
certbot register --server https://acme.example.com/directory \
  --eab-kid "<KID>" --eab-hmac-key "<HMAC_KEY>" -m admin@example.com

# acme.sh
acme.sh --register-account --server https://acme.example.com/directory \
  --eab-kid "<KID>" --eab-hmac-key "<HMAC_KEY>"

把占位符换成 CA 控制台给出的值,并注意不要留在 shell 历史或代码仓库里。

常见误区

  • EAB 密钥取代了 ACME 账户密钥。 它只在注册时用一次,之后每个请求仍由账户密钥签名。
  • EAB 凭据泄露没关系。 拿到凭据的人可能注册出关联到你 CA 账户的 ACME 账户,应当按密钥级别保管。
  • 有了 EAB 就不用验证域名。 除非 CA 已为你的账户预先验证过该域名,否则每个域名仍需完成 DCV。

延伸阅读