首页/系统/信创系统运维速查/证书过期导致访问异常的处置
常见问题65 条

证书过期导致访问异常的处置

浏览器或调用方报证书过期/不受信:openssl 查有效期与信任链,替换证书后完测语法再 reload,并核对系统时间。

信创系统运维速查系统更新于 2026-10-13

证书过期为什么突然爆发

证书都有明确的有效期,到期瞬间所有依赖它的客户端同时报错,属于典型的定时炸弹式故障。浏览器与调用方给出的提示各不相同:有的说过期,有的说不受信任,有的只说握手失败。用命令行工具直接读取服务端证书的有效期与颁发链,比猜测报错含义更可靠。

换证书之前的两个检查

一是核对系统时间,时间漂移会让未过期的证书被判定为过期,这类情况下换证书并不能解决问题。二是核对证书链是否完整,只替换叶子证书而漏掉中间证书,浏览器与客户端仍然认为不受信任。两项确认之后再做替换与重载。

基本信息

检查工具openssl 客户端命令、curl 详细输出
关注信息生效与失效时间、主体、颁发者、校验返回码
服务侧改动更新证书文件后先校验配置再平滑重载
常见遗漏中间证书缺失、客户端信任库未同步

典型使用场景

  • 浏览器或接口调用方集中报证书过期
  • 自签证书更换后内网客户端仍提示不受信任
  • 负载均衡与应用服务器两侧证书不一致造成轮询报错
  • 巡检时核对证书剩余有效期,提前安排续期
  • 排查 HTTPS 握手失败,确认是证书问题还是协议配置问题

检查

检查
openssl s_client -connect app.example.com:443 -servername app.example.com </dev/null 2>/dev/null | openssl x509 -noout -dates -subject -issuer
curl -vI https://app.example.com 2>&1 | grep -iE 'expire|certificate|SSL' | head
date                                          # 系统时间是否漂移
openssl s_client -connect app.example.com:443 -showcerts </dev/null 2>/dev/null | grep -c 'BEGIN CERTIFICATE'   # 链上证书数量

替换与验证

替换与验证
# 更新证书与私钥文件后(以 nginx 为例):
nginx -t && systemctl reload nginx            # 先校验配置再平滑重载
openssl s_client -connect app.example.com:443 </dev/null 2>/dev/null | grep -E 'Verify return code|depth'
curl -sI https://app.example.com | head -3    # 复核访问正常
# 多节点部署时逐台更新,避免节点间证书版本不一致

报错与含义

报错或现象含义处理方向
certificate has expired证书已过期更新证书并重载服务
unable to verify the first certificate信任链不完整补上中间证书
self signed certificate自签证书不在信任库分发根证书或改用受信证书
证书未过期却报过期客户端系统时间不正确先核对并校正时间
仅在部分客户端报错对端信任库差异更新对应客户端的信任库
把证书剩余有效期纳入巡检或监控告警,在到期前留出足够的更换与验证时间;自签证书场景要同步维护客户端的信任库清单,否则每次更换都要重新分发。

易错点

  • 只替换叶子证书不补中间证书,链不完整,客户端依旧判定不受信任
  • 系统时间漂移导致未过期证书被判过期,直接换证书只是掩盖了真正的问题
  • 更新后直接重启服务而不先校验配置,配置写错会让服务起不来,业务中断时间变长
  • 多节点部署只更新了一部分节点,轮询时出现时通时不通的间歇性报错

数据来源与参考

  • man 1 openssl
  • nginx 官方文档(SSL 配置)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌