客户打开你的网站,浏览器弹出全屏红色警告:「您的连接不是私密连接」「攻击者可能会试图窃取您的信息」。
对一个陌生访客来说,这个警告等于在说「这个网站有病毒」。外贸站尤其致命——海外客户对这类警告的敏感度比国内高得多,看到直接关掉,不会点「高级 → 继续访问」。
而最常见的原因,荒唐得让人无奈:免费证书三个月过期了,没人续。
一、为什么会过期
Let’s Encrypt 的免费证书有效期是 90 天。这不是它抠门,是它故意的——短有效期倒逼自动化,也降低证书被滥用的风险。
问题在于,很多人的证书是手动申请、手动部署的。三个月一到,到期,网站报错。然后慌慌张张去续,下次又忘。
常见翻车场景:
- 宝塔面板自动续期任务没生效(最常见)
- 证书换了,但 nginx 配置里还指向旧证书路径
- 站点用了 CDN,只续了源站忘了 CDN,或反过来
- 域名换了解析,验证方式(HTTP-01)失效,自动续期失败
- 服务器上残留了旧的定时任务,和新任务打架
二、先诊断:你的证书现在什么状态
命令行看
echo | openssl s_client -connect 你的域名.com:443 -servername 你的域名.com 2>/dev/null | openssl x509 -noout -dates -subject
输出会显示 notBefore(生效日)和 notAfter(到期日)。
在线查(推荐,能查出配置问题)
用 SSL Labs(ssllabs.com/ssltest)跑一次完整检测。它不只查过期,还能查出:
- 证书链不完整(安卓机型上会报错,电脑上却正常)
- 是否支持老设备/老浏览器
- 有没有不安全的协议还开着
三、宝塔面板:正确配置自动续期
宝塔的 Let’s Encrypt 是自带自动续期的,但它会静默失败。装完必须做下面这些检查。
1. 确认续期任务存在
面板 → 计划任务,看有没有一条「续签SSL证书」的任务,周期一般是每月或每 30 天。
没有就手动加一条:任务类型选「续签SSL证书」,执行周期选「每月」。
2. 验证方式:DNS 验证比文件验证靠谱
如果你的站点有任何一层反代(CDN、反向代理、负载均衡),文件验证(HTTP-01)大概率会失败——因为 Let’s Encrypt 的验证请求被挡在外面了。
这种情况改用 DNS 验证(DNS-01):面板里选 DNS 验证,填你的域名服务商 API(阿里云、腾讯云、Cloudflare 都支持),它会自动加 TXT 记录完成验证。
配一次,以后永久自动。
3. 续期后要重载 Web 服务
证书文件更新了,但 nginx 还读着内存里的旧证书——这是很多人「续期成功了但网站还是报错」的原因。
宝塔的续期任务一般会自动 reload。如果你是自己写的脚本,记得加:
nginx -s reload # 或 /etc/init.d/nginx reload
四、CDN 是最大的坑
如果你的站用了 Cloudflare、又拍、阿里云 CDN,有两套证书:
- CDN 到用户这一段(边缘证书)
- CDN 到你的源服务器这一段(源站证书)
两边都要有效,缺一个都打不开。
Cloudflare 的情况
Cloudflare 的边缘证书是自动管理的,你不用管。但源站证书要你自己维护。建议直接用 Cloudflare 的 Origin CA 证书——有效期可以设 15 年,一次部署管很久。
另外注意 Cloudflare 的 SSL 模式:
- Flexible(灵活):用户到 CF 是加密的,CF 到源站是明文。源站没证书也能访问,但数据是明文传输的,且容易造成重定向死循环
- Full(完全):全程加密,源站需要有证书(自签名也行)
- Full (strict)(严格):源站必须是有效证书 —— 推荐用这个
国内 CDN
阿里云、腾讯云 CDN 的证书需要在控制台单独上传。到期不会自动续(除非你配了自动同步)。建议设个日历提醒,或者直接把证书有效期设长一点。
五、让它彻底不用管:三层保险
第一层:自动续期(解决 95% 的情况)
前面配好的自动任务。
第二层:到期监控(防止自动续期悄悄失败)
自动续期不是 100% 可靠——域名解析改了、API 密钥过期了、面板出问题了,都会失败而且不会通知你。
所以必须有监控。免费方案:
- UptimeRobot:免费版可以监控 HTTPS 证书到期,提前 30 天发邮件
- Better Uptime / HetrixTools:也有免费额度
- 自己写个脚本:每周检查一次到期时间,小于 14 天就推送到企业微信/钉钉
自己写的话,核心命令:
echo | openssl s_client -connect 域名:443 -servername 域名 2>/dev/null | openssl x509 -noout -checkend 1209600 # 检查 14 天内是否过期,返回非0即告警
第三层:用长有效期证书(可选)
如果你不想折腾自动化,还有个笨办法:买一年期的付费证书。最便宜的 DV 证书一年几十块(国内云厂商经常有免费一年期 DV 证书)。
缺点是每年还是要手动换一次。但至少频率从「三个月」降到「一年」,忘的概率小很多。
如果是 Cloudflare 用户,Origin CA 证书能签 15 年,这个最省事。
六、证书过期之后怎么补救
已经挂了的话:
- 立刻重新申请证书(面板里点「申请」或「续签」)
- 确认 nginx 配置指向新证书路径
nginx -t检查配置,然后nginx -s reload- 如果用 CDN,同步更新 CDN 上的证书
- 清 CDN 缓存
- 用无痕窗口 + 手机 4G 各访问一次确认
一般 10 分钟内能恢复。真正损失的是这段时间的访客和信任,不是技术难度。
最后
SSL 证书过期是所有网站故障里最不值得发生的一种——它完全可预测、完全可自动化,损失却很大(尤其对正在投放广告的站)。
花 15 分钟配好自动续期 + 到期监控,这件事就从你的待办清单里永久消失了。
顺手提醒:域名本身也会过期,而且过期后果比证书严重得多(网站直接解析不到)。域名建议开启自动续费,并确保绑定的邮箱和手机号是你能收到的——很多域名过期是因为续费通知发到了废弃邮箱。