HTTPS 与证书:过期那天全站打不开
证书配上去只是开始。本文说明混合内容为什么让小锁消失、证书到期如何提前发现、以及自动续期失败的几种常见原因。
- 页面走 HTTPS 但引用了 HTTP 资源会触发混合内容,小锁消失甚至资源被拦截。
- 富文本里存的外部图片链接改模板改不到,需要在数据库层面批量处理。
- 自动续期会因验证方式变更、解析调整、服务器重建等原因静默失败。
- 到期检查必须独立于续期机制,否则脚本挂掉时两者一起失效。
- 接口与静态资源域名的证书过期最隐蔽:网页能打开,但数据全部加载失败。
HTTPS 现在是默认要求,配置本身也不复杂。真正出事的是两类情况:配好了但页面上仍显示不安全,以及某天早上证书过期、全站打不开,而没有任何人提前知道。
混合内容:小锁消失的原因
页面本身走 HTTPS,但里面引用的图片、脚本或样式仍是 HTTP 地址,浏览器就会降级提示甚至直接拦截。最常见的来源是编辑在后台粘贴的外部图片链接、以及早年写死在模板里的第三方脚本地址。
排查办法是打开浏览器控制台看警告,它会逐条列出哪些资源走了 HTTP。批量处理时要注意数据库里存的富文本内容 —— 那部分不在代码里,改模板是改不到的。
全站跳转要做彻底
- HTTP 访问一律 301 到 HTTPS,包括带 www 和不带 www 的两套;
- 跳转要一步到位,避免 HTTP 跳 HTTP 的 www 再跳 HTTPS 这种两级跳;
- 内部链接直接写 HTTPS 或使用相对路径,不要依赖跳转来纠正;
- sitemap、规范链接标签、结构化数据里的地址都要是 HTTPS 形式。
到期监控比续期配置更重要
自动续期是常态,但它会失败 —— 验证方式变更、域名解析调整、续期脚本所在服务器被重建、磁盘满了导致写入失败。这些都不会主动告警,直到证书真的过期。
应当有一个独立于续期机制的到期检查:定时从外部请求站点、读取证书有效期、剩余天数低于阈值就告警。独立是关键 —— 如果检查和续期是同一套脚本,脚本本身挂掉时两者一起失效。
容易漏掉的几个域名
主站的证书通常有人管,而接口域名、后台域名、静态资源域名、以及测试环境常常各自配置、各自过期。做一张清单列出所有对外提供服务的域名,逐个纳入监控。接口域名证书过期的表现尤其隐蔽:网页能打开,只是所有数据加载失败。
常见问题
网站显示不安全是什么原因?
最常见是混合内容:页面本身走 HTTPS,但引用的图片、脚本或样式仍是 HTTP 地址。打开浏览器控制台可以逐条看到。注意数据库里富文本内容中粘贴的外部链接,改模板无法覆盖这部分。
证书自动续期了还需要监控吗?
需要,而且监控必须独立于续期机制。验证方式变更、域名解析调整、续期脚本所在服务器被重建都会导致静默失败。建议从外部定时请求站点读取证书有效期,剩余天数低于阈值就告警。
哪些域名容易漏掉证书管理?
接口域名、后台域名、静态资源域名和测试环境。接口域名证书过期的表现特别隐蔽——网页能正常打开,只是所有数据加载失败,排查时容易往后端代码方向找。应当列一张对外服务域名清单逐个纳入监控。
参考资料
- Cloudflare SSL/TLS Documentation · Cloudflare
- HTTPS – Advanced Administration Handbook · WordPress.org