直接答案:25 个首页中,23 个完成 TLS 握手、21 个证书校验通过。E13 的证书已过期 1,642 天且主机名不匹配,E27 使用自签名证书;E04 的 443 端口三次连接超时,E16 三次都在握手阶段收到 TLS 内部错误。18 个站点用 TLS 1.3、5 个用 TLS 1.2;9 张证书将在 31–90 天内到期,没有 30 天内到期的。
本文只做 TLS 握手与证书字段检查,不发送 HTTP 请求,也不判断证书吊销状态或页面内容。
方法:先握手读证书,再用系统信任库验签
2026-11-08 05:48–05:49,对第 4 期 25 个首页的最终主机做两段 TLS 检查:先用不校验证书的上下文完成带 SNI 的握手,读取协议版本与证书;再用系统信任库重新握手,校验证书链与主机名。只做握手,不发送 HTTP 请求;连接超时 6 秒;失败的 E04、E16 各间隔 20 秒重试 2 次。
| 项 | 判定 | 边界 |
|---|---|---|
| 握手成功 | TCP 443 + TLS 握手完成 | 不判断 HTTP 层是否可用 |
| 校验通过 | 系统信任库接受且主机名匹配 | 不测 OCSP、吊销或证书透明度 |
| 过期 | notAfter 早于检查时间 | 只读证书字段,不推断业务状态 |
| 签发机构 | 按 issuer 归一化为 8 类 | 机构本身不代表站点安全性 |
| 到期桶 | 剩余天数分 5 档 | 单次快照,不预测续期 |
结果:21/25 通过校验,2 个证书失败、2 个握手失败
| 结果 | 站点数 | 占 25 |
|---|---|---|
| 握手成功且校验通过 | 21 | 84.0% |
| 握手成功但校验失败 | 2 | 8.0% |
| 握手失败 | 2 | 8.0% |
两个校验失败的原因不同:E13 的证书在 2022 年就已过期(距今 1,642 天),且证书名与当前主机不匹配;E27 用的是自签名证书,虽然 notAfter 还剩 1,123 天,但没有受信任 CA 背书。两者的浏览器提示不同,但结果都是公网用户无法正常验证身份。
证书有效期:9 张 31–90 天内到期
| 剩余有效期 | 证书数 | 说明 |
|---|---|---|
| 已过期 | 1 | E13,过期 1,642 天 |
| 0–7 天 | 0 | — |
| 8–30 天 | 0 | — |
| 31–90 天 | 9 | 最短 35 天(E12),最长 90 天(E29) |
| >90 天 | 13 | 含 E27 自签名证书 |
31–90 天区间最集中,符合 90 天证书的常见生命周期;没有 30 天内到期的证书,说明这一批站点当前没有临近过期的公开证书。但到期日只是信号:证书可能提前更换,也可能因私钥或域名问题被吊销,本文不检查这些状态。
协议与签发机构:TLS 1.3 占 18/23
| 协议 | 站点数 | 说明 |
|---|---|---|
| TLS 1.3 | 18 | 23 个完成握手的站点中占 78.3% |
| TLS 1.2 | 5 | E01、E08、E18、E19、E25 |
| 未完成握手 | 2 | E04、E16 |
| 签发机构 | 证书数 | 说明 |
|---|---|---|
| DigiCert | 8 | 最多 |
| 其他 / 未归类 | 7 | 含 E27 自签名 |
| Certum | 3 | — |
| Let's Encrypt | 3 | 均为 90 天内有效期 |
| TrustAsia | 2 | 含已过期的 E13 |
与协议跳转 pilot 的 4 个 SSL 错误对照
2026-11-08 02:41 测 http/https 根路径时,E04、E13、E16、E27 的 https 请求都报 SSL 错误,当时未逐个归因。本轮的握手结果可以对照:
| 站点 | 02:41 https 请求 | 本轮 TLS / 证书 | 解释 |
|---|---|---|---|
| E04 | SSL 错误 | 443 连接超时(3 次) | 没有可用的 HTTPS 监听或网络不通 |
| E13 | SSL 错误 | 过期 1,642 天 + 主机名不匹配 | 证书问题,可复现 |
| E16 | SSL 错误 | TLS 内部错误(3 次) | 但 03:42、04:40 的 HTTPS 请求成功,握手不稳定 |
| E27 | SSL 错误 | 自签名证书 | 证书问题,可复现 |
4 个错误里,2 个可由证书直接解释,1 个是端口不可达,1 个是间歇性握手失败。E16 的差异最值得记录:同一站点在 03:42 与 04:40 的 HTTPS 请求都成功,05:48 起连续三次 TLS 内部错误,说明单次 SSL 错误不能直接当作长期故障。
对验收的启示
- 证书过期是硬故障。 E13 过期 4 年多,浏览器会直接拦截;这类问题应进入到期监控,而不是等用户反馈。
- 自签名不等于有效。 E27 的自签名证书还剩 1,123 天,但公网不可信;内部系统与官网要分开处理。
- 到期日要进监控。 9 张证书在 31–90 天内到期;90 天证书应确认自动续期链路。
- 把超时、TLS alert、证书错误分开记录。 三者排查方向不同,混成“SSL 错误”会掩盖真实原因。
- TLS 1.3 已经不是少数。 18/23 完成握手的站点使用 1.3;TLS 1.2 仍可用,但要确认加密套件与后续升级路径。企业官网验收可参考网站建设服务的检查清单。
局限
- 单次快照:2026-11-08 05:48–05:49 的握手结果,CDN 与 WAF 可能按地区或时间变化。
- 只做握手:不发送 HTTP 请求,不判断页面、重定向或 HSTS 是否正确。
- 不检查吊销:未做 OCSP、CRL 或证书透明度查询;证书链只由系统信任库判断。
- 未测多网络:只从当前网络发起,未比较 IPv6、不同地区或 SNI 变体。
- 25 站 pilot:E16 的间歇性握手失败未归因;不外推行业。
数据与复算
匿名数据:equipment-homepage-tls-certificates-2026.csv(25 行 × 13 列:握手状态、协议、剩余天数、到期桶、主机名匹配、校验结果与原因、签发机构、SAN 数、是否过期、检查时间、错误类型)。仓库内为 docs/research/2026-11-homepage-tls-certificates.csv。
解析:scripts/tls_certificate_probe.py;单元测试 scripts/test_content_tls_certificate.py(18 项,无网络)。运行:
python -m unittest scripts.test_content_tls_certificate
配套:首页 canonical 与协议跳转 pilot、首页安全响应头 pilot、首页缓存、压缩与重访 pilot、首页 HTTP/2 与 HTTP/3 pilot、首页主体与合规信号 pilot、首页 CSP pilot。
数据来源与口径
- 样本:第 4 期 25 个首页的最终主机(同一批 sample_id)。
- 握手:Python
ssl,SNI 使用主机名,超时 6 秒,2026-11-08 05:48–05:49(Asia/Shanghai)。 - 校验:系统默认信任库 + 主机名校验;失败原因取
SSLCertVerificationError的 verify_message。 - 证书字段:notBefore / notAfter / issuer / subjectAltName,均由标准库解码。
- 签发机构:按 issuer 归一化为固定类别;E27 自签名计入“其他”。
常见问题
证书没过期就一定可信吗?
不一定。E27 的自签名证书有效期还剩 1,123 天,但没有受信任 CA 背书,浏览器仍会拦截。
TLS 1.2 需要淘汰吗?
本期 5 个站点仍用 TLS 1.2,本身不等于漏洞;但 TLS 1.3 握手更简单,新配置建议直接用 1.3。
为什么 E04、E16 没有证书数据?
E04 的 443 端口三次连接都超时;E16 三次都在 TLS 握手阶段收到 internal error。两者都没有完成握手,读不到证书。
剩余 31–90 天到期算危险吗?
不算异常,90 天证书很常见;关键是自动续期。本文只记录剩余天数,不判断续期是否自动。
25 个站点能代表行业吗?
不能。这是第 4 期同一批装备企业官网的 pilot,只描述这 25 个首页,不外推总体。
数据能复核吗?
可以。公开 CSV 25 行 × 13 列;scripts/tls_certificate_probe.py 有 18 项离线单测,不联网。