Let's Encrypt: ACME如何彻底简化证书获取

ACME打破了证书签发长时间没有标准化的局面。

Let's Encrypt: ACME如何彻底简化证书获取

对于每一个尝试过自行搭建一个站点的人来说,https的配置总是带有繁琐、复杂的标签:

  1. 需要申请一个有效的CA证书
  2. 反向代理的繁琐配置
  3. 子域名的证书申请非常麻烦
  4. 证书过期后需要手动替换
  5. ...

ACME

自动证书管理环境(英语:Automatic Certificate Management Environment,缩写ACME)是一种通信协议,用于证书颁发机构与其用户的Web服务器之间的自动化交互,允许以极低成本自动化部署公钥基础设施。该协议由互联网安全研究小组(ISRG)为Let's Encrypt服务设计。该协议通过HTTPS协议传输JSON格式的信息,并已由专门的IETF工作组在RFC 8555中规范为一个互联网标准。

在理解ACME的工作方式和提供的便利能力之前,我们需要先明确一个核心问题:

  • CA签发证书的条件是,能够证明申请证书的人持有这个域名

传统的签发过程中,CA认可这个证明的方式是通过域名注册局+域名服务商来完成鉴权;由于各家域名服务商的鉴权方式、实现逻辑都有很大的不同,导致申请证书这个过程几乎只能依靠手动申请或API申请的方式。

除了上面的证明方式,我们是不是还可以有其他的方式来向证明CA我们拥有这个域名呢?如果不能直接证明,能不能够通过一些「只有域名拥有者才能造成的行为」来证明域名的持有?

ACME针对这个问题,提出了三种Challenge (质询)的方式:

HTTP Challenge:

http challenge的证明依据在于:申请者有能力修改域名指向的地址的服务,暴露出令牌;由此可证明申请者有域名指向的地址的控制权,对证书来说和有域名的所有权等价。

DNS Challenge:

dns Challenge的证明依据在于:申请者有控制域名的DNS解析的能力,对于CA来说,即证明了域名的所有权。

TLS Challenge:

tls Challenge的证明依据在于:申请者有修改域名指向的服务器的证书的权力,即可证明申请者持有这个域名。巧妙的点在于,利用签发临时证书,来让对应站点临时拥有合法的证书,一旦完成TLS握手和证书信息校验,即可签发证书。

ACME事实上提出了一个标准,允许通过自动化的方式为不管托管在哪里的域名进行证书的签发,这样即使证书可能会出现过期的情况,自动化的程序也可以实现对即将过期的证书进行更新,从而保持证书的有效性,不再需要人为的介入。

RFC Reference:
RFC 8555: Automatic Certificate Management Environment (ACME)
Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.

RFC 8555