蜘蛛池知识

蜘蛛池入口页的 HTTPS 与 TLS 握手:证书异常时蜘蛛会怎么处理

蜘蛛池入口页如果 HTTPS 握手失败,蜘蛛连页面内容都拿不到,后续的链接发现和抓取预算都无从谈起。本文从证书链、SNI、TLS 版本、域名匹配和混合内容几个角度,说明常见配置问题怎么排查,以及日常运维里可以固定检查哪些项目。

蜘蛛池知识

蜘蛛池入口页的 HTTPS 与 TLS 握手:证书异常时蜘蛛会怎么处理

为什么先看握手,而不是先看状态码

很多人排查蜘蛛抓取问题时,第一反应是看状态码、看访问日志。但如果入口页是 HTTPS,蜘蛛必须先完成 TLS 握手,才能发送 HTTP 请求。握手失败时,服务器日志里可能只有一条连接重置,甚至什么都没有,状态码自然也无从谈起。

对蜘蛛池入口页来说,域名多、证书配置来源杂,HTTPS 问题比单站更容易出现。下面按常见顺序梳理。

证书链不完整:最容易漏掉的中间证书

服务器证书需要和中间证书一起下发,客户端才能拼出完整信任链。如果只配置了域名证书,没有配中间证书,浏览器有时会缓存或自动补全,但蜘蛛和其他客户端不一定有同样的容错能力。

检查方式:用 openssl s_client -connect 域名:443 -servername 域名 -showcerts 查看返回的证书数量。如果只返回一张,通常说明中间证书缺失。也可以使用在线 SSL 检测工具,看信任链是否完整。

SNI 配置:多域名共用 IP 时的常见坑

同一台服务器上放多个 HTTPS 入口域名时,需要依赖 SNI 区分证书。如果服务器或 CDN 没有正确支持 SNI,蜘蛛请求某个域名时,可能拿到默认站点的证书,导致域名不匹配。

排查时,可以用不带 SNI 的请求测试,观察返回的证书是哪一个。如果默认证书和入口域名不一致,就要检查虚拟主机或 CDN 的 SNI 配置。

TLS 版本与加密套件

TLS 版本过旧,比如只开 TLS 1.0 或 1.1,现代蜘蛛可能直接拒绝连接。版本过新,比如只开 TLS 1.3,大多数蜘蛛已经支持,但极少数老旧爬虫可能握手失败。稳妥的做法是同时支持 TLS 1.2 和 TLS 1.3,禁用已知不安全的加密套件。

不要为了兼容极少数旧客户端,把 TLS 1.0 重新打开。旧协议带来的问题通常比它解决的更多。

证书有效期与域名匹配

证书过期、域名不匹配、通配符覆盖范围不足,都会让蜘蛛在握手阶段收到警告。有些蜘蛛会直接放弃,有些可能会继续,但结果不稳定。

  • 检查证书到期时间,设置提前续期提醒。
  • 确认证书覆盖所有入口子域名,包括泛解析用到的域名。
  • 如果使用多域名证书,核对 SAN 列表里是否包含实际入口。

混合内容与强制 HTTPS

入口页本身是 HTTPS,但页面内引用了 HTTP 资源,蜘蛛在渲染时可能遇到混合内容拦截。虽然这通常不影响 HTML 抓取,但会影响页面完整性和后续链接发现。

另外,HSTS 头可以强制 HTTPS,但如果配置错误,比如包含子域名但子域名没有证书,会把蜘蛛和自己都锁在错误配置上。启用前先确认所有入口域名都能正常 HTTPS 访问。

日常排查建议

  1. 固定用 curl -v 或 openssl 检查入口域名的握手过程。
  2. 从多个网络节点测试,不同出口线路可能看到不同的证书或连接结果。
  3. 在服务器日志中记录 TLS 握手失败,而不是只记录 HTTP 状态码。
  4. 批量新增入口域名时,把 HTTPS 检查加入上线清单。

HTTPS 握手是入口页可抓取性的第一道门槛。它不出问题时容易被忽略,一出问题又很难从状态码上直接看出来。把证书链、SNI、TLS 版本和域名匹配这几项做成例行检查,比事后猜测更有效。