# EAB（外部账户绑定）是什么？定义、例子与常见误区

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

Source: https://ssl.sh/zh/glossary/eab/
Last updated: 2026-11-10

EAB（External Account Binding，外部账户绑定）定义在 [RFC 8555](https://www.rfc-editor.org/rfc/rfc8555) 第 7.3.4 节。CA 通过网站或 API 给你一个密钥标识（kid）和一个 MAC 密钥。[ACME](https://ssl.sh/zh/glossary/acme/) 客户端注册账户时，额外附带一段用该 MAC 密钥对新账户公钥签名的 JWS，证明这次注册是由已知客户授权的。注册完成后 ACME 账户照常使用，之后每次下单都不再需要 EAB。

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

## 例子
```bash
# 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。

## 相关术语

- [ACME](https://ssl.sh/zh/glossary/acme/): ACME 是 IETF 标准协议（RFC 8555），让软件自动向 CA 证明域名控制权，并自动申请、续期和吊销证书。
- [证书颁发机构](https://ssl.sh/zh/glossary/certificate-authority/): 证书颁发机构（CA）是负责审核申请者、签发数字证书，并把公钥与域名或身份绑定在一起的机构。
- [DCV](https://ssl.sh/zh/glossary/dcv/): DCV 即域名控制权验证，是 CA 在签发证书前确认申请者确实控制证书中每一个域名的检查。
- [Let's Encrypt](https://ssl.sh/zh/glossary/let-s-encrypt/): Let's Encrypt 是由非营利组织 ISRG 运营的免费、自动化证书颁发机构，通过 ACME 协议签发域名验证型 TLS 证书。
- [私钥](https://ssl.sh/zh/glossary/private-key/): 私钥是非对称密钥对中保密的那一半，TLS 服务器用它证明自己拥有证书里的那把公钥。
- [OV 证书](https://ssl.sh/zh/glossary/ov-certificate/): OV 证书是 CA 在验证域名控制权之外，还核实了证书中所写组织真实合法存在的 TLS 证书。
