最后更新时间:
Let's Encrypt 和 ACME 协议 的目标是使设置 HTTPS 服务器并让它自动获得浏览器信任的证书成为可能,而无需任何人工干预。这可以通过在 Web 服务器上运行证书管理代理来实现。
为了了解该技术的运作方式,让我们逐步了解使用支持 Let's Encrypt 的证书管理代理设置 https://example.com/
的过程。
此过程包含两个步骤。首先,代理向 CA 证明 Web 服务器控制某个域名。然后,代理可以请求、续订和撤销该域名的证书。
域名验证
Let's Encrypt 通过公钥识别服务器管理员。代理软件首次与 Let's Encrypt 交互时,它会生成一对新的密钥,并向 Let's Encrypt CA 证明服务器控制一个或多个域名。这类似于传统 CA 过程,即创建帐户并将域名添加到该帐户。
为了启动此过程,代理会询问 Let's Encrypt CA 需要执行什么操作才能证明它控制 example.com
。Let's Encrypt CA 将查看正在请求的域名,并发布一组或多组挑战。这些是代理可以用来证明它控制域名的不同方法。例如,CA 可能会让代理选择以下选项之一:
- 在
example.com
下提供 DNS 记录,或者 - 在
http://example.com/
上的知名 URI 下提供 HTTP 资源
除了挑战之外,Let's Encrypt CA 还提供一个随机数,代理必须使用其私钥对随机数进行签名,以证明它控制着密钥对。

代理软件完成了一组提供的挑战。假设它能够完成上面提到的第二个任务:它在 http://example.com
站点上的指定路径上创建了一个文件。代理还使用其私钥对提供的随机数进行签名。一旦代理完成这些步骤,它就会通知 CA 它已准备好完成验证。
然后,CA 的工作是检查挑战是否已从 多个网络视角 得到满足。CA 验证随机数上的签名,并尝试从 Web 服务器下载文件,并确保它具有预期的内容。

如果随机数上的签名有效,并且挑战通过了验证,那么由公钥标识的代理被授权对 example.com
进行证书管理。我们将代理使用的密钥对称为 example.com
的“授权密钥对”。
证书颁发和撤销
一旦代理拥有授权密钥对,请求、续订和撤销证书就变得很简单——只需发送证书管理消息并使用授权密钥对对其进行签名即可。
为了获取域名的证书,代理会构建一个 PKCS#10 证书签名请求,要求 Let's Encrypt CA 为 example.com
颁发证书,并指定一个公钥。与往常一样,CSR 包含与 CSR 中的公钥相对应的私钥的签名。代理还使用 example.com
的授权密钥对整个 CSR 进行签名,以便 Let's Encrypt CA 知道它已获得授权。
当 Let's Encrypt CA 收到请求时,它会验证这两个签名。如果一切正常,它会为 example.com
颁发一个证书,该证书使用 CSR 中的公钥,并将其返回给代理。CA 还将向多个公共证书透明度 (CT) 日志提交该证书。有关详细信息,请参见 此处。

撤销的工作原理类似。代理使用授权用于 example.com
的密钥对对撤销请求进行签名,Let's Encrypt CA 会验证请求是否获得授权。如果是,它会在正常的撤销通道(即 OCSP)中发布撤销信息,以便像浏览器这样的依赖方可以知道它们不应该接受已撤销的证书。
