技术咨询专线

137-9839-1694

证书过期会导致整站 HTTPS 握手失败,微信内置浏览器直接拦截。本文讲清病因定位三步、证书类型区分、certbot 与 acme.sh 自动续签配置、换证后五项验证与五个常见坑。

SSL 证书过期整站打不开:续期流程与自动续签设置(pic1)

一、证书过期不是网站坏了,是握手就断了

证书过期的表现很容易被误判。服务器还活着,Nginx 也在跑,后台能进,但从外部访问时浏览器弹出一页红色警告,“您的连接不是私密连接”,错误码 NET::ERR_CERT_DATE_INVALID,有的能点“继续前往”,有的直接白屏。

原因很简单:HTTPS 握手在验证有效期这一步就中止了,请求根本没走到网站程序。这时候去查代码、翻数据库、重启 PHP 都是白费力气。

客户端策略也不同。桌面 Chrome 允许手动跳过,只是地址栏标红;微信和支付宝的内置浏览器、部分安卓 WebView 默认直接拦截;开了 HSTS 的域名连跳过入口都没有。这就是“我这边能打开、客户说打不开”的由来。

隐形成本比打不开更大:搜索引擎和 AI 抓取器同样校验证书,过期期间抓取失败,收录与排名往下掉,恢复比修证书慢得多。

二、先定位病因:三步就够

步骤一,看错误码。ERR_CERT_DATE_INVALID 是过期或本机时间不对;ERR_CERT_AUTHORITY_INVALID 是证书链不完整或用了自签证书;ERR_SSL_PROTOCOL_ERROR 是协议或端口问题,跟有效期无关。

步骤二,用命令行看实际到期时间:openssl s_client -connect 域名:443 -servername 域名 | openssl x509 -noout -dates,返回的 notAfter 就是到期时刻。浏览器说过期而这里显示有效,先查系统时间。

步骤三,确认前面有没有 CDN、WAF 或负载均衡。这类架构下用户访问的是边缘节点,源站换了、边缘还是旧的,就会出现“换了还报错”,要去 CDN 控制台单独更新。

三、续期前先弄清自己买的是哪种证书

按覆盖范围分三种。单域名保护一个主机名;多域名(SAN)在一张证书里列多个域名;通配符 *.example.com 覆盖所有二级子域但不含裸域,常要另加一条。企业站常见组合是 example.com 加 www.example.com,买之前确认两条都在 SAN 里。

按验证级别分。DV 只验证域名归属,几分钟签发、免费或几十元;OV 要核验企业主体,几百到几千元,证书详情里能看到公司名;EV 的绿色地址栏已被主流浏览器取消,溢价意义不大。给客户和采购看的 B2B 站用 OV 更合适。

按有效期分。公开 CA 的证书有效期上限 398 天且逐年缩短,所谓“一次买五年”实质是代管自动续期,每年仍换一张。这点要在合同里问清,否则第三年到期没人管就是一次整站故障。

四、自动续签:让它自己换,别靠人记

免费证书走 Let's Encrypt 或 ZeroSSL,工具用 certbot 或 acme.sh。以 certbot 为例,执行 certbot --nginx -d example.com -d www.example.com 会自动改写 Nginx 配置并加上 443 监听,之后装一个定时任务每天检查两次,到期前 30 天自动续。

验证方式选对是关键。HTTP-01(webroot)要求在 80 端口放验证文件,前提是 80 端口对外可达、没被 CDN 拦;DNS-01 是在解析里加一条 TXT 记录,通配符证书只能走这条,80 端口被封的服务器也走这条。用了 CDN 的站建议直接用 DNS-01。

续完要让服务重载,否则新证书躺在磁盘上不生效。certbot 配 --deploy-hook、acme.sh 配 --reloadcmd,内容写 systemctl reload nginx,用 reload 不用 restart,前者不断连接。

付费证书同理,只是换证在服务商后台,下载新证书和私钥覆盖后 reload。区别是必须有人管:谁买的、哪天到期、装在哪些节点,这三条要有台账。

五、换完之后必须验的五件事

一看证书链。openssl s_client -showcerts 应能看到服务器证书加中间证书,只装前者会让部分安卓设备和旧版 Java 客户端报不受信任,用服务商给的 fullchain 文件。

二看到期日和 SAN,确认带 www、不带 www 以及手机站子域都被覆盖。

三看 HTTP 是否 301 到 https,跳转目标写成 http 会造成循环跳转。

四看混合内容。页面里还引着 http:// 的图片或脚本,浏览器照样标不安全,用开发者工具 Console 查。

五看 HSTS。做过 preload 的域名证书一出问题连跳过都没有,提醒要提前到 45 天。

六、几个反复出现的坑

坑一:80 端口不通,webroot 验证失败,续期静默失败好几个月,人还以为在跑。每月跑一次 certbot renew --dry-run 演练,看输出是否全绿。

坑二:Nginx 里写死了证书绝对路径,续期换了目录配置没跟着改,reload 就起不来。用软链接指向实际文件更稳。

坑三:CDN 与源站双层证书只换一层。用户看到的是边缘证书,回源用的源站证书过期则表现为部分地区 5xx。

坑四:服务器时间漂移,证书有效也报过期,装 chrony 定时同步即可。

坑五:一台服务器多个站只给主站配了证书,子站还在用自签,主域一旦开了 HSTS 整个域都受影响。

七、把证书变成一项有截止日期的日常项

建议固定三件事:一张证书台账(域名、类型、签发机构、到期日、部署节点);一个提前 30 天的提醒,落在监控或日历里;一次月度 dry-run 演练。成本很低,能挡掉直接损失询盘的故障。

域名多、又叠了 CDN 和负载均衡的,部署点会比想象的多。画一张链路图(用户 → CDN → 负载均衡 → 源站),标注每个节点的证书位置与到期日,出问题按图逐个核。

锐客网做网站托管时会把证书到期日写进月度巡检表,无法自动续签的老服务器提前一个月手工换证,换完再跑一遍上面五项验证。不确定自家证书何时到期、链是否完整,可以把域名发过来,我们查完再给处理顺序,电话 137-9839-1694。

ABOUT THE AUTHOR 锐客网内容组 · 小锐

十年一线建站与运维经验,写我们真正在项目里踩过的坑:怎么选型、怎么控成本、上线后怎么养。

聊聊你的项目

获取建站方案评估

想搭建或改版网站,却不确定做哪种站、大概多少钱、要多久?留下行业与需求,我们给出方案规划与报价参考。