线上证书半夜过期,我花了 40 分钟才把站救回来

上个月某天凌晨两点,手机突然震了。打开一看,用户在群里说官网打不开,浏览器提示"您的连接不是私密连接"。

爬起来开电脑,SSH 上去先看 Nginx 状态——进程正常,80 端口也通。curl 一下 HTTPS,返回的确实是证书过期错误。翻了一下证书文件的时间戳,过期整整 6 个小时了。

说实话很丢人。证书什么时候到期的我根本没注意,买的时候选了一年期,到期前没有任何提醒(或者有提醒但邮件被我忽略了)。当时就一个想法:赶紧搞一张新的先顶上。

临时抢救过程

凌晨两点能干什么呢?云厂商的付费证书要等审核,肯定来不及。我去 Let’s Encrypt 手动签了一张,跑 certbot 的命令行,加 DNS 验证记录,折腾了大概 20 分钟拿到证书文件。

然后替换 Nginx 的 ssl_certificate 和 ssl_certificate_key 路径,reload 一下,站恢复了。前后 40 分钟左右。

但这只是救火。Let’s Encrypt 的证书 90 天就过期,如果不解决"到期了才知道"这个问题,三个月后还得再来一次。

后来我做了两件事

第一件:搞了证书到期监控。

到期了才发现的根本原因是没有监控。我试了几个方案:

自己写脚本用 openssl 检查证书到期时间然后发邮件提醒,能用但要维护脚本和 cron,服务器多了不好管。后来换了个在线监控平台,配好域名之后它自己检查,到期前通过微信推送提醒。这种方式省事,不用自己维护脚本。

第二件:把通配符证书的签发流程简化了。

我们有十几个子域名,以前是每个子域名单独申请证书,管理很麻烦。后来改成用通配符证书,一张 *.example.com 就覆盖所有子域名。

免费的通配符证书有效期 90 天,到期前监控会提醒,然后手动去续签。签发平台配好 DNS 服务商的密钥后,续签时 TXT 记录会自动加,不用再手动去 DNS 控制台操作,续签本身几分钟就能搞完。

续签完的新证书,如果你用的是阿里云的 CDN、OSS 这些,可以一键部署上去,续签之后新证书会自动同步到这些部署目标。但服务器上的 Nginx 证书还是得自己手动更新,这一点要注意。

复盘

这次事故其实就两个问题:一是没有到期提醒,二是证书管理太分散。解决了这两个,后面就没再出过类似的事。

几个教训:

证书到期监控一定要配,不管是自己写脚本还是用现成工具,总之不能靠记忆。我现在用的监控报警支持微信、邮件、短信、钉钉、飞书这些渠道,反正哪个方便用哪个。

通配符证书管理子域名确实省事,尤其是子域名多的时候。90 天的有效期虽然短了点,但有监控提醒的话其实不算麻烦。

Nginx 上的证书替换目前还是手动的,这块暂时没找到特别好的自动化方案,如果有好办法欢迎评论区交流。


我用的证书管理和监控是 ssl.spug.cc,感兴趣可以看看。证书

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值