Skip to content

概念与原理

目标:先建立正确的心智模型,理解 Certbot 在做什么、为什么证书只有 90 天、验证方式怎么选。

1. 几个名词

名词说明
TLS / SSL 证书用于 HTTPS 的证书,证明"这个域名对应的公钥属于谁",由 CA 签名。
CA(证书颁发机构)签发证书的机构。Let's Encrypt 是一个免费的公共 CA。
Let's Encrypt由 ISRG 运营的免费、自动化 CA,证书有效期 90 天。
ACME 协议自动化证书管理协议,客户端用它向 CA 申请/续期/撤销证书。
CertbotEFF 维护的 ACME 客户端,也是 Let's Encrypt 官方推荐的客户端之一。
ACME 挑战(challenge)CA 用来验证"你确实控制这个域名"的手段(HTTP-01 / DNS-01 / TLS-ALPN-01)。

一句话:Certbot 用 ACME 协议向 Let's Encrypt 证明你拥有某个域名,然后领到并安装证书,再周期性地自动续期。

2. 为什么证书只有 90 天

Let's Encrypt 的证书有效期固定为 90 天。设计意图是:

  1. 缩短暴露窗口:私钥一旦泄露,最多 90 天即失效。
  2. 强制自动化:手动换证书太痛苦,逼着所有人用自动续期(certbot renew + 系统定时任务)。
  3. 缩短吊销列表(CRL/OCSP):过期即淘汰,减少吊销状态需要维护的量。

所以"装完就忘"是错误认知——续期自动化是部署的一部分,不是可选项。参见 续期与自动化

3. 证书链与文件

一份签发的证书包含几个文件,Certbot 把它们放在 /etc/letsencrypt/live/<域名>/ 下:

文件内容用途
cert.pem你的域名证书(叶子证书)一般不直接用
chain.pem中间证书链一般不直接用
fullchain.pemcert.pem + chain.pem 拼接配 Web 服务器用这个
privkey.pem私钥配 Web 服务器用这个,务必保密

信任链:浏览器信任根证书 → 根签发中间证书 → 中间证书签发你的域名证书。把 fullchain.pem 交给 Web 服务器,客户端才能验证完整链路。

live/ 下的文件其实是符号链接,指向 archive/ 里的真实文件。每次续期生成新版本,live/ 链接自动切换到最新,Web 服务器路径永远不变。详见 配置与文件布局

4. 三种验证方式(challenge)对比

CA 在发证书前,必须确认你能控制这些域名。三种方式:

方式原理端口/记录支持通配符典型场景
HTTP-01CA 请求 http://<域名>/.well-known/acme-challenge/<token>,你要能返回指定内容TCP 80有公网 80 端口、有 Web 服务
DNS-01CA 让你在域名的 TXT 记录里写入 _acme-challenge.<域名> 的指定值DNS TXT通配符证书、80/443 都不开放
TLS-ALPN-01在 443 端口用特殊 ALPN 协议响应TCP 44380 被占用但 443 空闲、无需停 Web 服务

选型经验:

  • 有正常对外 Web 服务 → HTTP-01(webroot 或 nginx/apache 插件)。
  • 通配符 *.example.com → 只能 DNS-01
  • 域名 DNS 托管在 Cloudflare / 阿里云 / Route53 等 → DNS-01 + 对应 dns-* 插件可全自动。
  • 只想签证书、不装到 Web 服务器 → certonly + webroot/standalone/manual。

详见 插件与验证方式

5. 一次完整签发流程

certbot certonly --webroot -w /var/www/html -d example.com 为例:

  1. 注册账号(首次):Certbot 用你的邮箱在 Let's Encrypt 生成一个 ACME 账户(账号密钥存在 /etc/letsencrypt/accounts/)。
  2. 发起订单:请求为 example.com 签发证书。
  3. 创建挑战:CA 返回一个 token,Certbot 把 token 写到 /var/www/html/.well-known/acme-challenge/
  4. CA 验证:CA 通过公网访问 http://example.com/.well-known/acme-challenge/<token> 核对内容。
  5. 签发:验证通过后 CA 下发证书,Certbot 存入 archive/ 并在 live/ 建链接。
  6. (可选)安装--nginx/--apache 会再自动改配置、加载证书、可选加跳转/HSTS。
  7. 登记续期:生成 /etc/letsencrypt/renewal/example.com.conf,之后 certbot renew 按此配置自动续期。

6. 生产环境 vs 测试环境

  • 生产 CAhttps://acme-v02.api.letsencrypt.org/directory(默认)。
  • Staging 测试 CAhttps://acme-staging-v02.api.letsencrypt.org/directory,签的是不被浏览器信任的测试证书,但几乎不限速,适合反复调试。

调试方式二选一:

bash
# 方式 A:dry-run(走真实 CA 但只演练、不真正签发/写盘)
sudo certbot renew --dry-run

# 方式 B:staging(真签发,但签的是测试证书)
sudo certbot certonly --webroot -w /var/www/html -d example.com --test-cert

先 dry-run,再正式跑,能避免触发限速(见 排错与最佳实践)。