单个证书包含多个子域名时 Let's Encrypt 续签命令参数如何配置?

文章导读
对于包含多个子域名的 Let's Encrypt 证书,续签时最稳妥的方式是直接使用 certbot renew 命令,它会自动读取保存的域名列表;若需手动干预,务必通过 `--cert-name` 指定证书名称,避免遗漏子域名导致新证书覆盖范围变小。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
A A

对于包含多个子域名的 Let's Encrypt 证书,续签时最稳妥的方式是直接使用 certbot renew 命令,它会自动读取保存的域名列表;若需手动干预,务必通过 `--cert-name` 指定证书名称,避免遗漏子域名导致新证书覆盖范围变小。

先说结论:自动续签优先,手动续签需锁定证书名称。

  • 适合多域名证书维护
  • 先确认现有证书名称
  • 验收域名覆盖范围

命令速用版

大部分情况下,你不需要重新拼写完整的申请命令,Certbot 会记住之前的配置。

sudo certbot renew

如果必须手动指定(例如修改了验证方式),请带上证书名称参数:

sudo certbot renew `--cert-name` 你的证书名称

为什么会这样

Certbot 在首次申请证书后,会在 /etc/letsencrypt/renewal/ 目录下生成对应的配置文件,里面记录了当时包含的所有域名(SANs)。执行 renew 命令时,程序会读取这些配置,自动补全 -d 参数。

如果你手动运行 certbot certonly 并只写了一个域名,系统会认为你要申请一个新的、仅包含该域名的证书,而不是续签原有的多域名证书。这会导致旧证书的其他子域名在新证书中丢失,引发服务中断。

分步处理

1. 确认证书名称和包含的域名

sudo certbot certificates

找到 Certificate Name 列对应的名称,确认 Domains 列包含了你需要的所有子域名。

2. 执行续签命令

单个证书包含多个子域名时 Let's Encrypt 续签命令参数如何配置?

推荐直接使用自动续签,它会检查所有即将过期的证书:

sudo certbot renew `--dry-run`

先加 `--dry-run` 测试流程是否通畅,确认无误后去掉该参数正式执行。

3. 重载服务

续签成功后,Web 服务器通常不会自动加载新证书,需要重载配置:

sudo systemctl reload nginx

或者在 Certbot 命令中配置 `--deploy-hook` 自动处理。

怎么验证是否生效

1. 本地检查证书信息

sudo certbot certificates

查看 Validity 列的有效期是否已更新。

单个证书包含多个子域名时 Let's Encrypt 续签命令参数如何配置?

2. 命令行验证远程证书

echo | openssl s_client -connect 你的域名:443 -servername 你的域名 2>/dev/null | openssl x509 -noout -dates

对比 notAfter 时间是否延长。

3. 浏览器检查

访问任意一个子域名,点击地址栏锁图标,查看证书详情中的“使用者备用名称”是否包含所有预期的子域名。

常见坑

1. 遗漏子域名:手动续签时只写了主域名,导致其他子域名证书失效。

2. 频率限制:Let's Encrypt 对证书申请频率有限制,频繁失败的重试可能触发锁定,建议先用 `--dry-run` 测试。

3. 钩子脚本失效:续签成功但 Web 服务未重载,导致网站仍显示旧证书,直到服务器重启。

4. 配置文件权限:/etc/letsencrypt/ 目录权限被误改,导致 Certbot 无法读取 renewal 配置。