Caddy HTTPS 证书链报错?3 条命令定位并强制续期修复
【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy
今天凌晨,生产环境的 Caddy HTTPS 服务直接不可用:浏览器报ERR_CERT_UNKNOWN_ISSUER,curl 也立刻断开。这台机器跑的是 Caddy 自动 HTTPS,证书明明显示还有 20 天才到期,整站却打不开了。这是一次典型的证书链故障,下面是我完整走一遍的排查与修复过程,照着做即可。
git clone caddy 仓库
先搞清根因:CA 换了"印章",你的链还是旧的
一句话根因:Let's Encrypt 这类 CA 会定期轮换中间证书(Intermediate CA),旧中间证书会停止受信任。Caddy 缓存里若还挂着旧链,即使叶子证书(浏览器实际校验的那张)没到期,信任链也在中间断掉,握手直接失败。
打个比方:根证书是总部公章,中间证书是分部章。总部换了分部章,分部还在盖旧章——单据本身没过期,但谁都不认了。
三步定位:一张表照着查
| 现象 | 检查命令 | 判断锚点 |
|---|---|---|
浏览器报ERR_CERT_UNKNOWN_ISSUER,证书详情里中间那张标红 | curl -vI https://你的域名 2>&1 \| grep error | 报错指向 issuer 而非有效期 → 链的问题,不是叶子过期 |
| openssl 输出只有 1 张证书 | openssl s_client -connect 你的域名:443 -servername 你的域名 -showcerts </dev/null | 只看到 server 链、没有中间证书 → Caddy 下发的链不完整 |
日志里有failed to renew certificate | journalctl -u caddy -p info \| grep -i renew | 有续期失败记录 → 先修续期失败,链才会自动刷新 |
看到"中间证书标红"或"链里缺一张",就可以直接跳到修复方案。
修复:强制续期,把新链拉回来
主推方案是一条命令让 Caddy 立即向 Let's Encrypt 换证,新链自然带上新中间证书,无需手改 Caddyfile:
caddy renew --force备选方案:把签发源换成 Caddy 内置 CA(modules/caddytls/internalissuer.go)。链完全由本地掌控、不再受外部轮换影响,但外部浏览器不信任内部签发,只适合内网或隔离测试环境。
验证修复生效:一条命令看链是否完整
openssl s_client -connect 你的域名:443 -servername 你的域名 -showcerts </dev/null 2>&1 \| grep -E "s:|i:|Verify return code"预期输出长这样:
s:CN=你的域名 i:CN=E5,O=Let's Encrypt i:C=US,O=Internet Security Research Group,CN=ISRG Root X1 Verify return code: 0 (ok)出现i:CN=E5(或当前对应的 Let's Encrypt 中间 CA)且Verify return code: 0 (ok),说明链已完整,问题修复。
长期避坑:三条配置层面的预防
- 🔒 续期窗口别拉满。在 Caddyfile 里用
renewal_window_ratio(可选值 0~1,越小越早换证)让 Caddy 提前换证书,从源头避开"叶子快过期才触发换链"的窗口期。该选项在 caddyconfig/httpcaddyfile/options.go 中解析,全局和单站点块都支持。 - 👀 日志保持 info 级别并盯住 renew 关键词。续期失败、ACME 报错都会打出来,链断裂前通常有 1~2 条
failed to renew日志,比浏览器报错早得多。 - 📦 定期备份证书存储目录。Caddy 默认用
storage file_system(见 modules/filestorage/filestorage.go)把证书链缓存在本地磁盘。目录丢了,缓存的链也就没了,换机器、重装前务必备份。
收尾
现在你可以:①caddy renew --force② 用 openssl 验证Verify return code: 0 (ok)③ 加一条grep -i renew的日志巡检。链断了不慌,让 Caddy 自己换回新链就好。
【免费下载链接】caddyFast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS项目地址: https://gitcode.com/GitHub_Trending/ca/caddy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考