最后更新:Oct 18, 2019

Let’s Encrypt 和 ACME 协议的目标是实现可信数字证书的自动获取,从而简化 HTTPS 服务器部署中的人工操作。 这一目标是由 Web 服务器上的证书管理软件完成的。

为了理解该技术的工作原理,让我们来看一下使用支持 Let’s Encrypt 的证书管理软件来配置 https://example.com/ 的流程。

该流程分为两步。 首先,管理软件向证书颁发机构证明该服务器拥有域名的控制权。 之后,该管理软件就可以申请、续期或吊销该域名的证书。

域名认证

Let’s Encrypt 通过公钥识别服务器管理员。 证书管理软件首次与 Let’s Encrypt 交互时,会生成新的密钥对,并向 Let’s Encrypt CA 证明服务器控制着一个或多个域名。 这类似于创建帐户和向该帐户添加域名的传统证书颁发流程。

为了启动该过程,证书管理软件向 Let’s Encrypt CA 询问它需要做什么才能证明它控制 example.com。 Let’s Encrypt CA 会根据申请的域名提供一种或多种验证方式, 管理软件可以任选其一证明域名控制权。 例如,CA 可能会让证书管理软件(Agent)选择:

  • example.com 下配置 DNS 记录,或者
  • https://example.com/ 的已知 URI 下放置一个 HTTP 资源

除了验证方式外,Let’s Encrypt CA 还会提供一个一次性的数字 nonce,管理软件需要用私钥予以签名,从而证明密钥确实属于该软件。

Requesting challenges to validate example.com

证书管理软件需要选择一种验证方式完成验证。 假设它选择了第二种方式,在 http://example.com 的指定路径创建了一份文件, 并用私钥对收到的 nonce 进行数字签名。 完成这些步骤后,证书管理软件会通知 CA 它已准备好完成验证。

然后,CA 的工作就是检查验证是否已经完成。 CA 会验证 nonce 的签名,并尝试从 Web 服务器下载指定文件,确认内容准确无误。

Requesting authorization to act for example.com

如果 nonce 的签名有效,验证也顺利通过,那么该公钥对应的证书管理软件就有权管理 example.com 的数字证书。 证书管理软件使用的密钥称为 example.com 的“授权密钥”。

证书颁发和吊销

管理软件具备授权密钥后,证书的申请、续期、吊销操作就简单了,只需将各类证书管理指令用授权密钥签名后发给 CA 即可。

为了获得该域名的证书,证书管理软件将创建一个 PKCS#10 证书签名请求(CSR),要求 Let’s Encrypt CA 为指定的公钥颁发 example.com 的证书。 CSR 本身已经由其私钥进行了一次签名, 而证书管理软件还会用 example.com 的授权密钥对整个 CSR 再进行一次签名,以便 Let’s Encrypt CA 验证其来源。

Let’s Encrypt CA 收到请求后对这两份签名进行验证, 如果全部通过,就为 CSR 中的公钥颁发 example.com 的证书,并将证书文件发给管理软件。

Requesting a certificate for example.com

申请吊销证书的流程类似。 证书管理软件使用 example.com 的授权私钥签署一个吊销请求,Let’s Encrypt CA 将验证该请求是否已被授权。 如果已授权,则将吊销信息发布到正常的吊销通道(即 OCSP)中,以便浏览器等依赖方知道他们不应该接受这个已被吊销的证书。

Requesting revocation of a certificate for example.com