客户在贵州贵阳市观山湖区做旅游民宿预订,网站用的是HTTPS。有天早上突然接到好几个客户电话,说网站打不开,浏览器提示“证书无效”。
排查过程
自己用浏览器访问了一下,确实打不开,报错信息是证书已经过期或者尚未生效。但客户说证书是三个月前刚申请的,有效期一年,不可能过期。
登录服务器,用date命令看了一下系统时间,发现服务器的时间是2023年,而实际时间是2026年。服务器时间比真实时间慢了三年。
时间不对为什么会导致证书验证失败
SSL证书有生效时间和过期时间。浏览器在验证证书的时候,会拿本地时间跟证书的有效期做对比。服务器时间慢了三年,浏览器认为当前时间是2023年,而证书是2026年签发的,证书的生效时间在未来,浏览器就判定证书无效。
修复过程
用timedatectl命令把服务器时间同步到标准时间:
timedatectl set-timezone Asia/Shanghai timedatectl set-ntp true
第一条命令设置时区为上海,第二条命令开启NTP自动同步。等了几分钟,时间同步完成,date命令显示的时间跟真实时间一致了。
再访问网站,证书验证通过,网站恢复正常。
时间为什么变慢
查了一下NTP服务的状态,发现NTP服务之前被停掉了。可能是之前某次操作的时候误关了,也可能是系统更新的时候被禁用了。时间变慢之后,因为没有人发现,就一直没处理。
加固措施
把NTP服务设置成开机自启,确保服务器重启之后自动恢复时间同步。同时在监控系统里加了一条规则:服务器时间跟标准时间偏差超过5分钟就发告警。这样即使NTP服务再出问题,也能第一时间发现。
客户那边的情况
客户在贵阳观山湖区做民宿预订,旺季的时候每天有几十个订单。这次网站打不开持续了大概两个小时,影响了十几个订单。客户说以后一定要提前检查,不能等到出事了再处理。
一点补充
服务器时间不对不仅会影响SSL证书,还会影响很多其他功能。比如数据库的时间戳、日志的时间记录、定时任务的执行时间,全都跟系统时间有关。如果发现服务器时间不对,一定要第一时间同步,并且设置NTP自动校准。这是服务器运维中最基础但也最容易被忽略的一个点。
