先给结论:绝大多数证书掉签闪退,重新签一张就能解决,换证是留给那些根子上就出问题的人。区别很实在——重签是在原来的 CA、原来的主体名下重出一份,域名、公司名基本不动;换证是把签发方、证书类型甚至密钥算法一起换掉。这两件事的成本差一大截,别被一句“建议换证”给带跑了。

证书掉签闪退,先分清是哪一种“掉”
拿到站点先别急着动证书,对着现象一个个排查。浏览器打开整页红,点开“高级”能看到 NET::ERR_CERT_DATE_INVALID,多半就是过期;ERR_CERT_REVOKED 是被吊销;ERR_CERT_AUTHORITY_INVALID 是证书链不全,缺中间证书;ERR_CERT_COMMON_NAME_INVALID 是证书上的域名和访问域名对不上,比如换了 CDN 之后回源域名忘了加进证书。App 那边表现更含糊——接口全部失败、小程序 request:fail、支付回调 502,用户看到的就是白屏或者一闪而退。证书问题在服务端只是一行日志,到用户手里就成了一次闪退,中间隔着好几层壳。
还有个挺隐蔽的情况:服务器时间飘了。NTP 没开、虚拟机从休眠里恢复没校时,证书有效期在本地算出来就是过期,链上校验一律失败。先 date -u 看一眼,再谈重签。
重签就够了的情况,真占多数
到期忘了续、ACME 自动签发跑挂了、证书文件和私钥不配对、换服务器的时候只拷了证书没拷 key、CDN 换了节点但证书还是旧的那张。这些都属于“重签一份、配好就行”,没必要换 CA。Let’s Encrypt 那种三个月一签,失败一次就一直空着:验证方式被防火墙挡了、80 端口被别的服务占了、DNS-01 用的 API token 过期了,脚本静默失败,提醒邮件扔在没人看的邮箱里,等到报错那天才想起来还有这回事。
查日期和主体用 openssl x509 -in cert.pem -noout -dates -subject -issuer,看线上实际推的是哪一张用 openssl s_client -connect 域名:443 -servername 域名 -showcerts,顺便确认私钥和证书是不是一对(现在用 openssl pkey -pubout 比对公钥更稳)。这几个命令比在任何面板里点半天都快。
该换证、而不只是重签的信号
私钥泄露过,被别人拿到,那就不只是重签,得换密钥对重新签;公司改名、域名过户,主体对不上,CA 那边通常直接吊销;原来那家 CA 出了信任层面的问题,浏览器和系统不认了,这种只能换签发方;业务上要求 OV 证书、单域名要扩到通配符或者一串域名、RSA 想换 ECC、算法要求升级。还有一条不怎么上台面但很真实:证是早年找代理买的,续费报价比新签还离谱,那不如趁这次换一家——各家价格差异不小,多问两家再定,别信口头承诺。
换证容易出问题的环节,其实都在切换
签发本身很少出错,切换才容易出问题。稳妥的做法是并行:新证先在测试环境装好,旧证继续挂着;流量切过去、验证一遍,再回头发吊销申请。顺序反了,中间会有一段时间全站握手失败。中间证书要带全,Nginx 的 ssl_certificate 一般指向 fullchain.pem,服务器证书在前、中间证书在后,根证书不要往里塞。CAA 记录里得放行新的 CA,不然签发直接失败。开了 HSTS 的站点尤其小心,浏览器一旦缓存了强制 HTTPS,证书不对的那段时间用户连“继续访问”都点不了。
App 做了证书固定(pinning)的更麻烦。客户端把旧证书或者旧公钥写死在包里,服务端一换证,没升级的 App 全部连不上,用户那边看着就是闪退。这种必须留双证书并行期,或者把校验改成公钥 pin、提前灰度发版。小程序、公众号、支付回调这类平台侧的域名校验,规则以官方文档为准,别凭记忆配。
自签先顶一下行不行
内网、测试环境、内部服务之间调用,自签完全可以,openssl req 一条命令就出来。公网不行:浏览器红页、系统不信任、支付和小程序直接拒,用户那边的表现还是打不开或者闪退。自签唯一体面的用法是配一个内部 CA,把根证书导进内网设备的信任区。拿自签糊弄线上,等于给自己留一个随时会炸的雷。
比“重签还是换证”更该补的东西
到期提醒、链完整性检测、多地拨测,这三样做好,掉签这种事基本不会以“闪退”的形式出现在用户端。把证书指纹、签发方、到期日记进变更台账,换证的时候对着看,比凭记忆靠谱得多。
给一套几分钟能跑完的顺序:先 date -u 校时,再用 openssl 看线上证书的日期和签发者,然后对一遍私钥公钥,最后看链全不全。这四步走完,该重签还是该换证,答案自己就出来了。真要换,记住并行签发、先切后吊销、中间证书带全、CAA 放行、App 灰度——顺序别乱。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!