跳到主要内容
弗美科技
技术分享

HTTPS 证书过期那次,凌晨两点

一个客户站的证书在凌晨 2 点 07 分过期,值班手机响了。翻记录发现续期邮件发到了两年前离职同事的邮箱。手动换证书只花了 20 分钟,麻烦的是证书链顺序和 Nginx reload 之后旧连接还占着。后来上了到期前 30 天告警,收件人写进配置文件,不写人名。

2019年12月26日证书运维现场

手机响的时候是 2 点 11 分,告警短信比用户电话早了四分钟。屏幕上就一行:某客户站 TLS handshake 失败。

现场

爬起来开笔记本,ssh 上去第一件事看证书:

openssl s_client -connect 域名:443 2>/dev/null | openssl x509 -noout -dates

有效期到 2 点 07 分。刚过四分钟。

浏览器那边已经全红了,客户群里有两条消息,都是值班的运营发的,问是不是被黑了。我们回了一句「证书到期,在处理」,先把话接住。

续期邮件去哪了

证书是两年前装的,当时填的续期通知邮箱是那位同事的,人早离职了,邮箱还在但没人看。续期提醒一共发过 3 次,30 天、7 天、1 天,全躺在那儿。

这事跟 2017 年那次几乎一模一样,只是那次我们还没把收件人写进配置文件。

换证书那 20 分钟

新证书其实早就签好了,在另一个同事的下载目录里,只是没人装。scp 传上去,拼证书链,重启。

踩了两个小坑。一是证书链顺序,站点证书在前、中间证书在后,拼反了安卓机又报不受信任,改过来才好。二是 reload 之后用 curl 测还是旧证书,以为是配置没生效,其实是长连接还占着,等了 30 秒再测就对了。

全部弄完 2 点 31 分。

后来

第二天做了三件事。所有在跑的证书导进一张表,字段就四个:域名、到期日、存放路径、负责人。写了个脚本每天跑一次,到期前 30 天、7 天、1 天各发一次告警,收件人从配置文件读一个组别名,不写具体人名,人员变动改一处就行。

还有一条:证书文件统一放 /etc/ssl/站点域名/ 下面,别留在个人目录。那次如果证书在下载目录里找不着,20 分钟就不止 20 分钟了。

那年年底我们把这张表接到了每月的运维检查单上。不为别的,凌晨两点爬起来这件事,一次就够了。

商务咨询 · 免费初步沟通

需要针对你的场景给个建议?

把业务背景和当前系统情况告诉我们,我们会给出可执行的思路。

在线留言

周一至周五 9:00–18:00 · 工作日 9:00–18:00 响应,留言会在一个工作日内回复。

商务微信
商务微信二维码

扫一扫,加商务微信咨询服务与方案报价

或填写需求表单