把 HTTPS 放到 CDN 边缘是常见架构:能提升性能、统一证书管理并减轻源站负担,但也带来 SNI、证书链、回源验证与缓存策略等细节问题。本文以工程师视角给出一套可执行的落地清单、排查流程与真机验证方法,包含常用命令及工具组合(如 OpenSSL、curl、tcpdump、Wireshark、Charles、mitmproxy)——并说明在代理无法解密移动端流量时,如何用抓包大师(Sniffmaster)做设备侧证据补充。
核心概念(简明)
- 边缘 TLS 终止(Edge TLS):客户端到 CDN 为 HTTPS,边缘解密并缓存,回源可选择 HTTP 或 HTTPS。
- 端到端 TLS(Passthrough / Origin TLS):CDN 不解密 TLS,直接透传到源站,用于 mTLS 或严格合规场景。
- 证书管理:CDN 托管证书 vs 自有证书上传;不论哪种,边缘节点必须能返回完整的 fullchain。
- 协议协商:ALPN 决定是否启用 HTTP/2,TLS 设置应优先支持 TLS1.2/1.3。
部署清单(可复制)
- 在 CDN 控制台绑定域名并选择证书来源;若上传自有证书,务必上传 fullchain(包含中间证书)。
- 配置 SNI 映射,验证每个自定义域返回正确证书。
- 配置回源模式:若回源使用 HTTPS,确保源站证书可被 CDN 信任(含中间证书)。
- 启用 OCSP stapling 与合适的 cipher suite,测试 ALPN/h2 支持。
- 设置缓存策略与 Cache-Key,注意不要把敏感 query 放入缓存键,且为 API 请求设定合理的 Cache-Control。
- 配置 HSTS(上线前慎重,预加载有风险)。
验证与排查流程(一步步来)
-
基本握手检查:
openssl s_client -connect your.domain:443 -servername your.domain -alpn h2 -showcerts curl -v --http2 https://your.domain/检查证书链、ALPN、OCSP response 与响应头中的
via/x-cache。 -
地域/运营商验证:在不同网络(公司网、家宽、移动网络)和不同区域测试,观察边缘同步延迟或节点差异。
-
回源问题定位:若边缘返回 5xx,查看 CDN 回源日志;在源站用 tcpdump 抓包确认是否收到边缘请求。
-
兼容性测试:覆盖旧版 iOS/Android,特别注意老设备对根证书或签名算法的支持差异。
-
自动化监控:把握手失败率、OCSP 拉取失败、证书到期告警纳入监控,提前处理。
常见故障与快速判断
- 证书链不完整(Only works on desktop but not some mobiles):
openssl s_client显示缺中间证书 → 补 fullchain 并重载。 - SNI 返回错证书:用
-servername对不同域名测试,若错误检查 CDN 的域名映射配置。 - 回源验证失败:检查源站是否启用了严格证书校验,或是否使用了自签/内部 CA。
- 边缘节点缓存旧证书:证书替换后仍旧报错,可能是边缘节点尚未刷新;联系 CDN 支持或等待同步。
移动真机与代理不可用时的取证方法
桌面代理(Charles/mitmproxy)能做很多开发调试,但当 App 做 SSL Pinning、mTLS 或设备无法信任代理 CA 时,代理方法失效。工程上推荐的做法是收集端到端证据并对比:
- 在源站或边缘抓 tcpdump(保留时间窗)。
- 在受影响设备上做原始流量抓取并导出 pcap,作为设备侧证据 —— 当无法安装代理或不便改构建时,使用可以USB直连设备并按 App 过滤抓包的方案会更稳定。抓包大师(Sniffmaster) 在这类场景中常被用来导出设备端 pcap(无需越狱),便于在 Wireshark 中查看 ClientHello 的 SNI、ServerHello 与证书链,判断问题出在客户端、网络中间件还是 CDN/回源。
- 对齐时间线,比较 ClientHello 与服务器侧的 ServerHello/证书,若设备端看到的证书与源站不一致,说明中间有替换或边缘未同步。
工具与组合建议
- 日常联调:curl + openssl + Chrome DevTools + Charles/Proxyman。
- 自动化与脚本化:tshark、监控告警脚本(握手失败率、证书到期)。
- 底层取证:tcpdump + Wireshark(多点抓包对比)。
- 移动真机盲区:设备侧 pcap 工具(如 Sniffmaster)用于补充证据链。
CDN 支持 HTTPS 是成熟方案,但要把证书链、SNI、回源验证、OCSP 与缓存策略当成工程问题来做:部署前的清单、上线后的多网多端验证、以及把设备侧抓包作为最后一环纳入排查流程,能把“只在部分用户复现”的问题变成可定位的工程任务。