Let's Encrypt 的运作方式

最近更新: August 2, 2025

Let’s Encrypt 和 ACME 协议的目标是实现可信数字证书的自动获取,从而简化 HTTPS 服务器部署中的人工操作。 这一过程是由网页服务器上的 ACME 客户端完成的。

为了理解该技术的工作原理,让我们来了解一下使用 ACME 客户端为 https://example.com/ 申请证书的流程。

该流程分为两步。 首先 ACME 客户端需要向证书颁发机构 (CA) 证明该服务器拥有域名的控制权, 然后客户端就可以为此域名申请或吊销证书了。

域名认证

Let’s Encrypt 通过公钥识别不同的 ACME 客户端。 ACME 客户端首次与 Let’s Encrypt 交互时会生成一对密钥,并向 Let’s Encrypt 证明其用户对若干域名具有控制权。 这与创建账户并添加域名的传统证书颁发流程类似。

首先,客户端会询问 Let’s Encrypt CA 如何才能证明其对 example.com 的控制权。 Let’s Encrypt CA 会根据申请的域名提供一种或多种验证方式, 客户端可以任选其一。 例如,CA 可能会让客户端选择:

询问如何证明对 example.com 的控制权

客户端需要选择一种验证方式完成验证。 假设它选择了第二种方式,在 http://example.com 的指定路径创建了一份文件, 完成这一步骤后,客户端就会通知 CA 准备就绪。

接下来 CA 需要从多个网络位置进行核验。

申请验证对 example.com 的控制权

如果验证顺利通过,那么该公钥对应的客户端就有权管理 example.com 的数字证书。

需要注意的是,这一过程不能通过 HTTPS 进行,否则会存在安全风险。 因此,Let’s Encrypt 实际上会从多个网络位置同时进行验证, 从而有效防御验证过程中可能遭到的攻击。

证书颁发和吊销

客户端得到授权后,证书的申请、续期、吊销操作就简单了,只需将各类证书管理指令用经过授权的密钥签名后发给 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 的证书,并将证书文件发给客户端。 CA 还会将证书上传至各类公开的证书透明化 (CT) 日志系统中, 详情可以在此处了解。

为 example.com 申请证书

后续的证书续期流程与首次申请类似,先验证域名再申请新的证书。

证书吊销

证书吊销的流程也与申请类似, 客户端首先使用有权管理 example.com 证书的账户私钥签署一份吊销请求,Let’s Encrypt CA 核实该请求后, 通过证书吊销列表 (CRL) 发布吊销信息,从而使浏览器等依赖方停止接受这份已吊销的证书。

申请吊销 example.com 的证书