web学习笔记编程技术学习与分享

HTTPS 证书申请与自动续期

2026 年 07 月 30 日约 3 分钟阅读 运维与部署

证书过期导致的业务中断完全可以避免——前提是把续期当成自动流程而不是人工任务。

免费证书的两种验证

Let's Encrypt 通过挑战(challenge)验证域名控制权:

  • HTTP-01:在 /.well-known/acme-challenge/ 放一个文件,CA 通过 80 端口访问。要求域名能被公网访问且 80 端口开放;
  • DNS-01:在域名 TXT 记录写入验证值。支持泛域名证书,适合多子域名和无法开放 80 的场景。

certbot 标准流程

# Apache 自动配置
certbot --apache -d example.com -d www.example.com

# 只取证书不动配置(Nginx 手动引用)
certbot certonly --webroot -w /var/www/html -d example.com

# 检查自动续期
certbot renew --dry-run

certbot 安装时通常自带 systemd timer,每天两次检查、剩余 30 天内自动续期。确认它在跑:

systemctl list-timers | grep certbot

续期后要 reload

证书文件更新了,但 Web 服务器加载的还是旧证书。用 deploy hook 自动重载:

# /etc/letsencrypt/renewal-hooks/deploy/reload.sh
#!/bin/sh
systemctl reload nginx

漏掉这一步是「证书明明续了还是提示过期」的标准原因。

监控兜底

自动化也可能静默失败(DNS 变更、80 端口被占、CA 限流)。加一层独立监控,剩余有效期低于 14 天就告警:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -enddate

外部拨测服务(UptimeRobot 等)也提供证书过期检查,接入现有的告警渠道即可。

部署建议

  • 全站 301 到 HTTPS,别保留 HTTP 版本;
  • TLS 配置用 Mozilla 的生成器按「中间兼容」档取配置,开 HSTS 前先确认所有子域都能 HTTPS;
  • 通配符证书(DNS-01)适合子域名多的场景,一张证书覆盖 *.example.com,续期流程也只有一套。
HTTPSTLS证书