證书過期這件事,通常不是技術难题,而是没人盯着。等蜘蛛来抓的时候看到握手失敗,多半會直接停下;就算你当天續好了,也要等下一轮抓取才慢慢恢复。更麻烦的是,這類問题在你自己的浏览器里经常看不出来——舊證书被缓存了,或者你訪問的一直是 www 那個版本。
為什么值得單獨查一次
證书過期、證书鏈不全、HTTP 與 HTTPS 混用,對外表現都是「打不開」或「提示不安全」。用戶會退回去,蜘蛛也會。而這三件事恰好在同一個位置:服務器配置。它們不會随着内容更新而自然修复,也不會在後台报表里跳出来提醒你。
自查清單
1. 有效期與覆盖范围
- 记下證书到期日,提前 14 到 30 天續期,不要等最後三天。
- 確認主域名、www 版本以及需要使用的子域名是否都在證书覆盖范围内。泛域名證书和多張單域名證书混用时,容易漏掉某個主机名。
- 如果用了自動續期,也要確認續期任務真的跑成功了——失敗一次,下一次往往就撞上到期那天。
2. 證书鏈是否完整
中間證书缺失时,現代浏览器可能自己补齐,看起来一切正常;但部分爬虫和較舊的客戶端會直接握手失敗。
- 命令行检查:openssl s_client -connect example.com:443 -servername example.com,看輸出里的 verify 结果和證书鏈层級。
- 也可以用在线的 SSL 檢測工具對照,重点看有没有「證书鏈不完整」這類提示。
3. HTTP 到 HTTPS 的跳轉
- 每個 HTTP 地址應 301 跳到對應的 HTTPS 地址,而不是统统跳到首頁。
- 確認只跳一次。http 跳 https、再跳 www、再跳带斜杠的路径,這種连环跳會白白消耗抓取時間。
- 跳轉使用 301 或 308 這類永久狀態碼,別用 302。
4. 主机名與协议统一
- www 與非 www 只保留一個正式版本,另一個用 301 指向它。
- 检查 sitemap、canonical 标簽、站内連結里寫的协议和主机名是否一致。混着寫會让蜘蛛把同一篇内容当成多個地址。
- 頁面内引用站内资源时,建议直接用 https 開头的绝對地址或相對地址,少用协议相對寫法。
5. 混合内容
頁面加载的图片、脚本、样式如果還是 http 地址,浏览器會给出警告,部分内容可能被拦下。用開發者工具的控制台看一眼有没有 mixed content 提示,通常几分钟就能掃完主要模板。
多久查一次
- 平时每月看一次有效期和跳轉配置。
- 證书临近到期时改成每周確認,直到新證书生效。
- 把到期日寫進运维日歷,或者配置到期前 30 天、14 天、7 天的提醒。
證书更像一份會到期的订阅,而不是装好就一劳永逸的零件。真正有用的不是记住到期日,而是有一個不依赖记性的提醒机制。
顺手一起看的两件事
一是服務器時間是否准确,系統時間偏移會造成證书校驗異常,也會让日誌時間對不上;二是如果開啟了 HSTS,要清楚它的回退成本,別在測試环境随手打開,然後在正式环境手忙脚乱。
整套检查做下来,熟练之後不到二十分钟。它挡掉的是一次可能影响全站的抓取中断,性價比相当高。