Cryptology Academy · 课时

Let's Encrypt 与 ACME 协议自动化

使用 ACME 协议以及 Certbot 等客户端,自动完成证书签发与续期。

第 4 / 4 课13 个步骤

Let's Encrypt 与 ACME 协议自动化 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

Let's Encrypt 简介

Let's Encrypt 是由互联网安全研究组(ISRG)运营的免费、自动化且开放的证书颁发机构,于 2015 年 12 月启动公开测试。它已经签发了超过 30 亿张证书,通过消除获取受公共信任的 TLS 证书所需的成本和复杂性,大幅提升了整个网络对 HTTPS 的采用率。

ACME 协议概述

自动化证书管理环境(ACME)协议于 2019 年标准化为 RFC 8555,规定了客户端如何自动证明域名所有权并从 CA 获取证书。ACME 以经过密码学验证的自动化交互取代了手动域名验证流程,从而实现无需人工干预的证书生命周期管理。

HTTP-01 挑战

HTTP-01 挑战通过要求 ACME 客户端在 "http://DOMAIN/.well-known/acme-challenge/TOKEN" 放置特定的令牌文件来验证域名所有权。CA 会获取此 URL 以验证令牌。HTTP-01 易于实现,但要求端口 80 可访问,并且不能用于通配符证书。

DNS-01 挑战

DNS-01 挑战通过要求 ACME 客户端在 "_acme-challenge.DOMAIN" 创建包含特定值的 DNS TXT 记录来验证域名所有权。CA 会查询 DNS 以验证该记录。DNS-01 是唯一支持签发通配符证书("*.example.com")的挑战类型,并且即使网页服务器位于防火墙之后也能正常工作。

TLS-ALPN-01 挑战

TLS-ALPN-01 挑战在 TLS 层使用自定义 ALPN 协议标识符 "acme-tls/1" 来验证域名所有权。ACME 客户端会在端口 443 上临时提供一张自签名证书,并将挑战令牌放入特殊扩展中。无需运行网页服务器即可使用此挑战,并且它支持负载均衡环境。

Certbot 参考客户端

Certbot 是电子前沿基金会为 Let's Encrypt 提供的参考 ACME 客户端。它能够自动完成整个证书生命周期:域名验证、证书签发和自动续期。Certbot 包含适用于 Apache 和 nginx 的插件,可以自动配置 TLS 设置。在现代 Linux 发行版上,请通过 "snap install --classic certbot" 安装。

替代 ACME 客户端

除 Certbot 外,还有许多适用于不同场景的 ACME 客户端。acme.sh 是一个纯 Shell 脚本 ACME 客户端,广泛用于轻量级环境。Caddy 网页服务器内置 ACME,并会自动续期证书。在容器环境中使用的 Traefik,则通过其 certificatesResolvers 配置为容器化工作负载处理 ACME。

证书续期自动化

Let's Encrypt 证书的有效期按设计设为 90 天,以鼓励使用自动化,并缩短私钥遭泄露后的暴露窗口。Certbot 会安装 systemd 定时器或 cron 任务,每天运行两次 "certbot renew",为任何距离到期不足 30 天的证书续期。手动续期是一种反模式,容易导致服务中断。

Let's Encrypt 速率限制

Let's Encrypt 通过实施速率限制来防止滥用。主要限制包括:每个注册域名每周最多 50 张证书,以及每周最多 5 张重复证书。失败的验证尝试也受到速率限制,即每个主机名每小时最多 5 次。在开发期间,Let's Encrypt 的暂存环境会针对一个不受公共信任的测试 CA 提供不限量的证书签发。

多域名和通配符证书

一张 ACME 证书可以覆盖多个域名(主题备用名称)。"certbot --domains example.com,www.example.com,api.example.com" 会签发一张包含三个 SAN 的证书。通配符证书("*.example.com")要求使用 DNS-01 验证,并覆盖所有单层子域名。通配符不会覆盖域名顶点本身(example.com),因此需要额外添加一个 SAN。

用于内部 PKI 的 ACME

ACME 协议并不局限于 Let's Encrypt。Step-CA(smallstep)、EJBCA 和 HashiCorp Vault 等内部 CA 可以提供 ACME 端点,用于自动化内部证书管理。这样一来,面向公共服务所使用的自动化证书生命周期管理,也可以应用于内部 mTLS 基础设施和私有服务。

ACME 挑战检查

要签发诸如 "*.example.com" 这样的通配符证书,需要使用哪种 ACME 挑战类型?

课程回顾:Let's Encrypt 与 ACME

Let's Encrypt 通过 ACME 协议(RFC 8555)提供免费证书。HTTP-01 挑战适用于端口 80 上的非通配符证书。DNS-01 通过证明对 DNS 区域的控制权来支持通配符证书。TLS-ALPN-01 无需网页服务器即可工作。Certbot 和 acme.sh 能够自动完成整个生命周期。90 天有效期的证书需要使用自动化管理。速率限制要求您在测试期间使用暂存环境。

免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「Let's Encrypt 与 ACME 协议自动化」课时是免费的吗?

是的 — 「Let's Encrypt 与 ACME 协议自动化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「Let's Encrypt 与 ACME 协议自动化」这节课中我会学到什么?

使用 ACME 协议以及 Certbot 等客户端,自动完成证书签发与续期。 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「Let's Encrypt 与 ACME 协议自动化」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. OpenSSL 命令行基础
  2. 创建和管理证书链
  3. OCSP 装订与证书透明度
  4. Let's Encrypt 与 ACME 协议自动化
← 返回 Cryptology Academy