Let's Encrypt 是什么?它是如何工作的?

Let’s Encrypt 是一个开放且自动化的证书颁发机构(Certificate Authority,简称 CA),它使用 ACME 协议(Automatic Certificate Management Environment,自动证书管理环境)为兼容的客户端提供免费的 TLS/SSL 证书。
这些证书可以用于加密你的 Web 服务器与访问者之间的通信,从而实现 HTTPS。Let’s Encrypt 支持多种客户端工具,由不同的编程语言编写,并且可以与流行的服务、管理工具及服务器集成。
目前最流行的 Let’s Encrypt 客户端是 Certbot,它由 Electronic Frontier Foundation(电子前沿基金会) 负责开发。Certbot 不仅用于验证域名所有权和获取证书,还可以自动为 Apache 和 Nginx Web 服务器配置 TLS/SSL。
证书颁发机构是什么?
证书颁发机构(CA) 是一种通过加密签名来证明 TLS/SSL 证书真实性的实体。浏览器和操作系统维护一份受信任的 CA 列表,用来验证网站证书的有效性。
在 Let’s Encrypt 出现之前,大多数 CA 都是商业机构,它们通常对证书服务收费。而 Let’s Encrypt 则是一个非盈利机构,旨在推广 HTTPS 网络安全,它采用完全自动化的流程,并通过赞助和捐助来支持运行成本,因此能够为用户免费提供证书。简直是大善人,点赞点赞!
Let’s Encrypt 的工作原理
Let’s Encrypt 使用的 ACME 协议 定义了客户端如何与 Let’s Encrypt 服务器通信来:
- 请求证书;
- 验证域名所有权;
- 下载证书。
Let’s Encrypt 提供的是 域名验证型证书,意味着颁发证书前它要确认请求来自真正控制该域名的人。它通过以下方式来实现:
- 向客户端发放一个唯一令牌(token);
- 客户端生成一个公钥,并将验证内容放在它所管理的 Web 服务器上;
- Let’s Encrypt 的验证服务器访问该文件来检查是否正确;
- 如果验证通过,就会签署并颁发证书。
ACME 协议定义了多种验证方式,最常用的有:
- HTTP 验证:客户端在 Web 服务器上创建一个特定路径的验证文件;
- DNS 验证:客户端在 DNS TXT 记录中设置验证内容。
Certbot 客户端
Certbot 是目前最受欢迎的 Let’s Encrypt 客户端程序。它包括在大多数主要 Linux 发行版的软件仓库中,并提供方便的自动配置功能。
要使用 Certbot 获取证书并更新 Apache 配置,只需执行:
sudo certbot --apache -d www.example.com
将进入 Certbot 交互模式:
- 提示你回答一些问题;
- 运行域名验证;
- 下载证书;
- 更新 Web 服务器配置;
- 重新加载服务器。
成功后,你可以通过浏览器访问 https://www.example.com,此时浏览器地址栏会显示绿色锁标志,表示连接已加密且证书有效。
Let’s Encrypt 颁发的证书有效期目前为 90 天,从 2028 年开始申请的 Let's Encrypt 证书有效期将缩短一半,从 90 天变为 45 天,因此设置自动续订非常重要。可以使用以下命令来续订服务器上的所有证书:
sudo certbot renew
建议将此命令加入到 crontab(定时任务) 中每天运行一次,这样证书将在到期前自动续订。对于使用 --apache 或 --nginx 安装的证书,Certbot 还会在续订 SSL 证书后自动重新加载服务器。不得不说,考虑真周到呀!
其他 ACME 客户端
由于 ACME 协议是开放且文档完善的,因此出现了许多替代客户端:
- 不同编程语言实现的客户端(例如 Go、Shell、Node.js 等);
- 一些客户端可以在 非 root 权限下 运行;
- 支持自动通过 DNS API 创建 TXT 记录来完成挑战;
- 有的客户端直接集成到了 Web 服务器或反向代理中,使证书自动获取更简单。
一些受欢迎的 ACME 客户端示例包括:
- lego:用 Go 编写的单文件二进制客户端;
- acme.sh:使用 shell 脚本实现,可在非特权环境运行;
- Caddy:一个完整的 Go 语言 Web 服务器,内置 Let’s Encrypt 支持。
小结
本文介绍了 Let’s Encrypt 的基本概念及其工作原理,并简要介绍了 Certbot 与其他 ACME 客户端。想要了解如何将 Let’s Encrypt 与特定软件结合使用(例如 Nginx 或 Apache),可以参考 GetIoT.tech 相应的教程示例。
