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 的证书