网站证书过期怎么解决:先确认过期、缺链还是时间错
网站证书过期怎么解决?先别急着重签。用一条命令看有效期和域名匹配,再看证书链是否完整,最后换设备、换网络确认不是本地时间或缓存问题。确认属于哪一种,才知道下一步是续签、补链,还是让用户校准时间。
怎么查
第一步:看有效期和域名
在任意一台能连外网的机器上跑:
`` echo | openssl s_client -connect 你的域名:443 -servername 你的域名 2>/dev/null | openssl x509 -noout -dates -subject -ext subjectAltName ``
正常:notAfter 是未来时间,subjectAltName 里包含你访问的域名。
异常:notAfter 已过,或 SAN 里没有这个域名,多出现在加了新域名之后。
这一步三十秒,先确认是不是真的过期。
第二步:看证书链有几张
`` echo | openssl s_client -connect 你的域名:443 -servername 你的域名 -showcerts 2>/dev/null | grep -c "BEGIN CERTIFICATE" ``
正常:返回 2 或以上(站点证书加中间证书)。
异常:只返回 1,说明中间证书没下发,桌面浏览器可能自己补,手机和部分客户端不会。
第三步:换设备与网络各试一次
手机用流量开一次,电脑换个网络开一次。
只有某一台设备报错:先看那台机器的系统时间和时区。
所有设备都报错:回到第一步的结果,以服务端证书为准。
第四步:看浏览器给的原话
把报错页上的英文抄下来,例如 NET::ERR_CERT_DATE_INVALID、NET::ERR_CERT_AUTHORITY_INVALID。
前一个指时间相关,后一个指签发者不被信任。两者处理方向不同,别混。
第五步:续签后再跑一次第一步
续签或补链之后,重跑第一步和第二步。
有效期变了、链变成 2 张以上,才算改完。
结果怎么读
| 看到什么 | 说明什么 | 下一步做什么 |
|---|---|---|
notAfter 已过 | 证书确实过期 | 续签并部署到全部节点 |
| SAN 里没有当前域名 | 域名不在证书覆盖范围 | 重新签发,把域名加进去 |
| 链只有 1 张 | 中间证书缺失 | 在服务端补全链文件 |
| 桌面正常、手机报错 | 客户端补链能力不同 | 先补链,再让用户重试 |
| 只有一台设备报错 | 本机时间或缓存异常 | 校准时间,清证书缓存 |
| 换网络后正常 | 中间设备做了替换 | 查那条链路上的代理设备 |
这些边界我还没验证
不同客户端对缺链的容忍度差别多大,我手上没有逐机型样本,只能按「先补链」处理。
证书透明日志里能否查到签发记录,这一项我没在生产上核过。
自动续签任务失败时的告警配置,各家的默认行为不一样,本文不给建议。
用多节点复测确认范围
证书问题常常只在部分节点暴露。用宝塔拨测的网站测速跑多地区多运营商节点,看状态码和 TLS 段耗时,再看各节点的证书表现。某一组全报错,先改那一组的部署,而不是全站重签。
我现在会这么做
1. 跑第一步,确认 notAfter 与 SAN。 2. 跑第二步,数证书张数。 3. 抄下浏览器报错原文。 4. 手机流量、电脑换网各试一次。 5. 续签或补链后重跑第一、二步。 6. 多节点复测,确认不是局部问题。
不建议一上来就重签:重签要重新部署,部署漏一个节点,问题还在,而且你会以为已经修好了。
现在先做第一步:把域名替换进那条 openssl 命令,看 notAfter 是哪一天。