自动证书管理环境(ACME)详解
自动证书管理环境(ACME)协议可实现公钥基础设施(PKI)证书生命周期管理的自动化,减少人工操作与相关风险。ACME 通过 HTTPS 传输 JSON 格式消息,简化证书的签发、续期和吊销流程,为管理大规模证书体系的 IT 团队保障安全高效的运维。
什么是 ACME 协议?
自动证书管理环境协议(ACME)是一类用于实现证书生命周期管理通信自动化的协议,通信双方为证书颁发机构(CA)与企业的 Web 服务器、邮件系统、用户设备,以及其他所有使用公钥基础设施(PKI)证书的场景。ACME 协议无许可费用,IT 团队仅需极少时间即可完成证书管理自动化的配置与执行,因此正逐步成为企业安全体系中被广泛采用的组件。
互联网安全研究组(ISRG)最初为自身的证书服务设计了 ACME 协议,后续该协议由其专属的 IETF 工作组正式制定为完整的互联网标准,发布于RFC 8555。当前协议版本为 ACME v2 API,发布于 2018 年 3 月。(此前版本 ACME v1 发布于 2016 年 4 月,目前已被弃用。)
PKI 证书签发的核心基础是:Sectigo 等证书颁发机构(CA)作为受信方,负责验证证书申请者确实合法拥有与 PKI 证书关联的身份及域名。以往需要人工交互传递 CA 完成身份验证、签发证书所需信息,以及用户部署已签发证书的全流程,现在均可通过 ACME 协议实现自动化。除证书签发流程外,该协议还可通过加密 HTTPS 通信传输简单的 JSON 格式消息,支撑证书吊销、续期等其他证书生命周期管理场景。
自动化协议——优势与适用场景
尽管公钥基础设施(PKI)提供的数字身份是目前安全性最强、最易用的身份认证与加密解决方案,但对于工作繁忙的 IT 团队而言,手动部署和管理证书耗时较长,还可能产生不必要的风险,这一问题始终存在。无论企业是为单台 Web 服务器部署一张 SSL 证书,还是管理组织内所有联网设备、用户身份对应的数百万张证书,证书签发、配置、部署的端到端流程最长可能需要数小时。手动管理证书还会让企业面临极高风险:证书因被遗忘而过期、所有权归属出现断层的问题,进而引发突发服务中断或关键业务系统故障,同时带来数据泄露与中间人攻击(MITM).
由于手动管理 PKI 证书存在诸多潜在隐患,企业需要 ACME 这类自动化标准,无需逐张人工确认证书有效性,即可保障证书配置与部署的正确性。这种自动化能力不仅有助于降低风险,还能帮助 IT 部门控制运维成本。
为什么选择 ACME 而非其他方案?
目前也存在其他证书自动化标准,例如基于安全传输的注册(Enrollment over Secure Transport,EST)以及简单证书注册协议(SCEP)以及与 Microsoft Active Directory 等企业架构相关的解决方案。那么,为什么 ACME 会成为越来越多企业青睐的自动化标准?
核心原因在于大多数企业的证书需求具备高复杂度与大规模特性。企业依赖公钥基础设施(PKI)证书完成各类场景的身份认证与加密,覆盖云端及本地的 Web 服务器、联网设备、移动设备、用户身份、邮件系统、网络设备、IoT 设备、DevOps 环境等众多对象。让这个庞大生态的管理难度进一步提升的是,企业通常运行在多套 IT 基础设施之上,而非单一的集中式架构。
IT 团队越来越多地借助 ACME 来应对规模化与复杂度带来的挑战,因为它具备以下优势:
- 作为开放标准,提供完整的命令集与可靠的错误处理机制,便于企业和证书颁发机构(CA)双方采用
- 面向负责部署、管理有效公钥基础设施(PKI)证书的 IT 团队,以及遵循严格认证流程的受信任证书颁发机构(CA),提供业界领先的 TLS 及其他公钥基础设施(PKI)安全实践
- 由社区持续迭代优化并提供支持,不受任何单一厂商或组织控制
- 具备添加和支持备用证书颁发机构(CA)的灵活性
- 可免费使用,成本低廉
ACME 协议的工作原理是什么?
ACME 协议包含两个通信实体:ACME 客户端与 ACME 服务器。ACME 客户端通过该协议发起证书颁发、吊销等证书管理操作请求。客户端运行在需要公钥基础设施(PKI)证书保护的用户服务器或设备上。ACME 服务器运行在证书颁发机构(CA)侧,例如 Sectigo,负责响应客户端请求,并在客户端完成授权后执行对应的请求操作。二者之间的通信基于安全 HTTPS 连接上传输的 JSON 消息实现。
点击了解更多关于Sectigo ACME 集成的信息。
该流程的另一个核心环节是认证步骤,即 ACME 挑战。只有通过挑战,证书颁发机构(CA)才会颁发证书或完成请求。这套验证流程的认证要求可确保证书仅颁发给受信任的用户。目前 ACME 挑战分为两类:
HTTP 挑战
当 ACME 服务器收到 ACME 客户端的请求后,证书颁发机构(CA)会向客户端返回一个令牌,要求客户端将其安装在服务器上。随后客户端会创建一个包含该令牌的文件,并在文件内容后追加设置阶段生成的授权密钥指纹。文件结构为(令牌)|| '.' ||(授权密钥指纹)。文件安装完成后,客户端会通知证书颁发机构(CA),由 CA 获取并验证该文件,验证通过后即可完成请求。
DNS 挑战
这类挑战增加了一重验证因素,要求 ACME 代理在对应域名 DNS 空间的 TXT 记录中填入指定值。其认证流程与 HTTP 挑战类似:证书颁发机构(CA)向客户端发送令牌,客户端追加授权密钥指纹后生成并安装挑战文件。当代理通知 CA 已完成挑战准备后,CA 会发起 DNS 查询以获取对应的 TXT 记录。
整个挑战流程速度很快,两种类型的挑战通常都能在15秒内完成。但根据 RFC 8555 的要求,管理员应当在 ACME 客户端发送任何请求前完成服务器配置,因为当用户侧系统的资源仍在部署过程中时,ACME 服务器的查询失败是很常见的情况。例如,DNS 或 HTTP 配置、防火墙规则需要一定时间才能在全网服务器中同步生效,如果 CA 在同步完成前就发起查询,就可能返回错误。只要客户端持续尝试,CA 侧的 ACME 服务器会将挑战状态标记为“进行中”,并每隔5到10秒重试一次查询。因此建议用户在配置过程中,确认服务器侧查询能够成功后再让客户端响应挑战,因为在上传文件或 DNS 记录后,到 CA 能够成功获取这些内容之间,可能存在短暂延迟。
如何配置客户端
配置 ACME 客户端时,用户首先需要选定要使用的客户端,再将其安装到对应的域名/服务器上以使用 ACME 协议。灵活性是 ACME 的一大优势,几乎所有企业可能用到的编程语言和环境都有对应的客户端实现:
- Bash
- C/C++
- Clojure
- Docker
- Go
- HAProxy
- Java
- Microsoft Azure
- nginx
- Node.js
- OpenShift
- Perl
- PHP
- Python
- Ruby
- Rust
- Windows/IIS
与开源标准的情况一致,所有证书颁发机构(CA)均不提供专有客户端。因此各组织可以自由选择想要使用的证书颁发机构(CA),前提是该CA支持ACME。以下是主流ACME v2客户端列表,可在GitHub上查看:
- 由电子前哨基金会(EFF)开发、Sectigo赞助的Certbot
- ACMESharp
- acme-client
- GetSSL
- Posh-ACME
- Caddy
- Sewer
- nginx ACME
- node-acme-lambda
下一步是配置ACME客户端,随后将其安装到需要部署公钥基础设施(PKI)证书的服务器上。配置流程共包含简单的6个步骤,仅需数分钟即可完成:
- 客户端提示用户输入需要管理的一个或多个域名。
- 从客户端提供的支持ACME的证书颁发机构(CA)列表中,选择目标CA。
- 选定CA后,客户端会与该CA建立连接并生成私钥对。
- CA会下发HTTP或DNS类型的ACME挑战,用于验证用户身份。
- 除挑战内容外,CA还会发送一个随机生成的数值,称为nonce。客户端使用刚生成的私钥对该数值进行签名,以证明自身持有该密钥对。
- 设置客户端联系CA进行证书续期的频率。
证书颁发机构(CA)验证挑战通过且签名真实有效后,ACME 客户端将被正式授权,代表已验证的域名执行相关操作。
ACME 如何支持证书生命周期管理(CLM)?
借助常规证书管理流程,使用 ACME 协议完成公钥基础设施(PKI)证书的签发、续期和吊销操作十分简便。客户端仅需发送标准 PKI 证书管理消息,并使用授权密钥对为相关证书签名即可。
若要签发或续期证书:
- 客户端会创建一个Certificate Signing Request (CSR),向证书颁发机构(CA)请求为已授权域名签发包含指定公钥的证书
- CSR 中包含由其携带公钥对应私钥生成的签名
- 客户端使用该域名的授权密钥对整个 CSR 签名,以便证书颁发机构(CA)验证其授权状态
- 证书颁发机构(CA)验证两处签名,若均有效,则为已授权域名签发票据 CSR 中公钥的证书
- 证书颁发机构(CA)将证书下发给客户端
通过 ACME 进行证书吊销的通信流程与签发、续期类似。客户端使用该域名的授权密钥对吊销请求签名,证书颁发机构(CA)验证请求具备授权后,会将吊销信息发布至标准吊销渠道,这样浏览器便不会接受已吊销的证书。
ACME 支持哪些类型的 TLS/SSL 证书及其他 PKI 证书?
如前所述,只要证书颁发机构(CA)为对应类型的 PKI 证书支持 ACME,ACME 标准就可支持企业 Web 服务器、邮件系统、用户设备及其他所有使用 PKI 场景下的 PKI 证书。例如,它支持采用不同验证模式的 SSL 证书——域名验证(DV)、组织验证(OV)和扩展验证(EV)证书——但需注意,在 ACME 提供的流程之外,可能还需要完成额外的验证步骤。
由于 Sectigo 提供SSL/TLS 证书以及Code Signing, S/MIME和其他X.509 certificates均支持 ACME,企业还需要一种可大规模实现端到端生命周期自动化管理的方案。Sectigo Certificate Manager支持 ACME 协议,可实现全自动化的证书生命周期管理(CLM)。


