ZeroSSL 90 天证书到期前必须做的 5 件事: HTTPS 续期 SOP 完整流程
上篇文章 (8/29 W6) 我给老 PRO 工具装上 ZeroSSL 正式证书, 当时说 "90 天后续期 SOP 我会单独写一篇", 兑现承诺。今天是 9/4, 距离 8/27 签发还剩 83 天, 但我已经按 SOP 演练了一遍 (用 staging 域名), 顺便把流程固化成 5 步脚本。
这篇文章是给 跟我一样: 自己跑自部署工具 + 装过 ZeroSSL 证书 + 不想配 ACME agent + 愿意每季度手动 5 分钟换一次证书的朋友。
1到期待时: ZeroSSL 自动发提醒邮件
ZeroSSL 在证书到期前 14 天 发邮件提醒 (发到申请时的邮箱)。如果你用 Resend / Gmail 收信, 设个 zerossl@yourdomain.com 过滤器, 不会漏。
收到邮件长这样:
Subject: [ZeroSSL] Your certificate for www.baccpc.com will expire in 14 days
Hi 陈志远,
The certificate for www.baccpc.com issued on 2026-08-27
will expire on 2026-11-25 (in 14 days).
To renew: https://app.zerossl.com/certificate/xxxxxx/renew
- ZeroSSL Team
不要点邮件里的链接 (虽然是真的, 但习惯直接去 app.zerossl.com 操作更稳)。
2ZeroSSL 控制台 reissue: 5 秒搞定新证书
- 登录 app.zerossl.com
- 左侧 Certificates → 找到 www.baccpc.com 那张 (Expired in 14 days)
- 点右侧 "Renew Certificate" 按钮
- 弹窗: "Choose a verification method" → 选 DNS CNAME (跟首次一样, 不要改 HTTP 因为 80 端口被 IIS 占了)
- 点 "Next" → ZeroSSL 生成 新 CNAME 记录 (hash 会变!)
坑 #1: 续期 CNAME 跟首次 CNAME 完全不一样。首次是 _5CA856F20F2D109CF6B26F0927B1A43C, 续期可能是 _A8F7BC2D3E1F4A5B6C7D8E9F0A1B2C3D。必须删旧 CNAME + 加新 CNAME, 不能只改值。
3GoDaddy DNS: 删旧 CNAME + 加新 CNAME (10 分钟)
登录 dcc.godaddy.com → 我的产品 → 域名 → baccpc.com → DNS → 记录:
- 找到
_5CA856F20F2D109CF6B26F0927B1A43C.baccpc.com这条 CNAME → 删 - 点 "添加" → 类型 CNAME → 主机
_A8F7BC2D3E1F4A5B6C7D8E9F0A1B2C3D→ 值9f7b11cfa5af85172870e15936857fb9.4a282cda8c9d892096197e0833bf72a0.ab12883837f650a.comodoca.com→ TTL 600 (10 分钟) → 保存 - 等 5-10 分钟, 验证:
# Windows PowerShell
nslookup -type=cname _A8F7BC2D3E1F4A5B6C7D8E9F0A1B2C3D.baccpc.com
# 应该返回 canonical name = 9f7b...comodoca.com
# 没返回? 等 5 分钟再试
返回 ZeroSSL 控制台 → 看到 "Verified" 绿色对勾 → 点 "Download Certificate" → 拿 certificate.crt + ca_bundle.crt。
4Flask 服务器: 替换 cert.pem + 重启 (3 分钟)
下载后用 W6 文章里写的 Python cryptography 库严格 LF 拼 cert.pem 脚本, 拷到 D:\phd824\:
# PowerShell 5.1: 解压 zip 后跑
python _patch_old_pro_https_8_27.py
# 脚本自动: 备份 cert.pem -> cert.pem.bak_8_27
# 拼 leaf + chain -> cert.pem (严格 LF)
# cryptography 库验证公钥匹配
# 杀 Python 进程
# 启动 Flask + 等 8 秒 + netstat 8000/8443
或者手动:
- PowerShell
Get-Process python | Stop-Process -Force - Python:
from cryptography.x509 import load_pem_x509_certificate; c = load_pem_x509_certificate(open('cert.pem','rb').read()); print(c.not_valid_after)验证新证书 - 重新
cd D:\phd824; python app.py(后台) netstat -an | findstr 8443看到 LISTENING
坑 #2: Flask 不会自动 reload cert.pem, 必须 kill + 重启。停服 5-10 秒, 用户无感。
5验证: HTTPS 不中断 (1 分钟)
- 浏览器开
https://www.baccpc.com:8443/(PHD) → 看证书信息, 应该显示新 90 天有效期 - 浏览器开
https://www.baccpc.com:8000/(老 PRO) → 同上 - 手机 4G/5G 测一次, 绿锁在
完整流程 5 分钟 (不包括 DNS 传播 10 分钟等待)。
图 1: 续期 5 步 checklist 一图流 (邮件 → reissue → DNS → 替换 → 验证)
整年续期日历: 4 个动作, 4 个日期
如果你也想 90 天自动续, 收藏这个表:
| 签发日 | 续期动作日 (提前 14 天) | 新证书生效 | 证书到期 |
|---|---|---|---|
| 2026-08-27 | 2026-11-11 (周二) | 2026-11-12 | 2026-11-25 |
| 2026-11-25 | 2027-02-10 (周三) | 2027-02-11 | 2027-02-23 |
| 2027-02-23 | 2027-05-11 (周二) | 2027-05-12 | 2027-05-24 |
| 2027-05-24 | 2027-08-10 (周二) | 2027-08-11 | 2027-08-22 |
把上面 4 个续期动作日加到日历提醒, 标题 "🔒 HTTPS 续期" + 提前 1 周再设个重复提醒。
为什么不配 ACME 自动续期?
你可能问: "ZeroSSL 2025 不是支持 ACME 吗, 干嘛还手动?"
理由:
- 复杂度: ACME agent (acme.sh / certbot) 装服务器 + DNS API token + cron 任务 + 监控失败告警。一次性 30 分钟配置, 每年维护 1 小时
- 风险: 自动化失败率高 (DNS API 改版 / cron 漏跑 / 文件权限错), 出问题往往是 12 点深夜, 用户满屏红锁
- 成本: 1 年 4 次手动 5 分钟 = 20 分钟/年, 跟自动差不多, 还能顺便看日志确认
我选手动 + 日历提醒。如果你是 10+ 域名 / 公司级, 再考虑 ACME。
踩坑清单 (省你 30 分钟)
- 续期 CNAME hash 全变 → 必须删旧 + 加新, 不能只改值
- Flask 不自动 reload cert → 必须 kill + 重启
- GoDaddy DNS 改完没等满 5 分钟 → nslookup 验证再操作
- PowerShell 拼 cert.crt 引入 CRLF → 用 Python cryptography 库, 严格 LF
- 到期日没记在日历 → 提前 14 天邮件 + 提前 7 天日历重复 + 提前 1 天日历
每条都是 W6 装证书 + W7 续期演练时实际踩过的, 不是抄文档。
图 2: 续期 90 天周期可视化 (签发 → 14天前提醒 → 续期动作 → 新证书生效 → 到期)
SSL 监控: 让 Google 帮你盯着
还有个免费被动保险: Google Transparency Report 有个 Safe Browsing 服务, 但要主动提交。
更简单: 把 https://www.baccpc.com/ 提交到 GSC, GSC 会在 SSL 过期前 7 天给你发邮件。这是 Google 主动监控, 不需要你装 agent。
结论: HTTPS 续期没那么复杂, 别被自动化吓退
ZeroSSL 90 天续期 = 5 步 + 5 分钟 + 一年 4 次, 加上日历提醒, 总时间投入 25 分钟/年。配 ACME 自动可能省 5 分钟, 但增加运维复杂度 + 失败风险。
下周我打算写一篇 "HTTPS 加密原理: 5 分钟给非技术读者讲明白", 接着 SSL 主题, 但换科普角度 (跟 W6/W7 工具向不同)。如果你对 ZeroSSL 装 IIS ARR 反代感兴趣 (用 IIS 终结 80/443 TLS, Flask 只跑 8000 内部端口) 也留言告诉我。
想看 W6 装 SSL 实战 6 小时全过程? 戳 PRO 工具装 SSL 实战。