网站证书过期怎么解决?先别急着重签。用一条命令看有效期和域名匹配,再看证书链是否完整,最后换设备、换网络确认不是本地时间或缓存问题。确认属于哪一种,才知道下一步是续签、补链,还是让用户校准时间。

怎么查

第一步:看有效期和域名

在任意一台能连外网的机器上跑:

`` 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 是哪一天。