PuppyIP 资源中心
网络与开发工具 5 分钟 发布于 2026-11-01

CloudFront 访客 ISP 与 TLS 详情:转发设置和字段判读

CloudFront-Viewer-ISP 和 CloudFront-Viewer-TLS-Details 是可选的源站请求头。将它们放进目标缓存行为的 Origin Request Policy;TLS 字段描述访客到 CloudFront 的连接,不代表 CloudFront 到源站的 TLS。

Amazon CloudFront Origin Request Policy CloudFront-Viewer-ISP CloudFront-Viewer-TLS-Details 后量子 TLS

服务对象与地域限制

PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。

代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。

本文要点

  • CloudFront-Viewer-ISP 只能通过 Origin Request Policy 转发,不能放进 Cache Policy 或 legacy cache settings;CloudFront 无法判断 ISP 时不会添加该头。
  • TLS-Details 是包含六个字符串字段的 JSON,描述 viewer-to-CloudFront 连接;该头也应使用 Origin Request Policy,而不是 Cache Policy。
  • TLS 1.2 恢复会话可能将三个加密字段设为 NONE;TLS 1.3 恢复会话仍有新协商的 keyExchange,但两个签名字段为 NONE。空字符串表示 CloudFront 无法确定字段值。
  • X25519MLKEM768 是 keyExchange 的示例,不代表连接中的所有算法都具备后量子安全性。源站日志记录的是源站请求,不能单独统计所有访客。

两种字段观察的是哪一段

Amazon 在 2026 年 10 月 30 日公告新增两个可选的访客信息头,CloudFront 可将它们转发给源站。CloudFront-Viewer-ISP 提供访客互联网服务提供商(ISP)的名称;CloudFront-Viewer-TLS-Details 用 JSON 描述访客与 CloudFront 协商出的 TLS 会话。它们可帮助源站按观测到的网络查看请求分布,或分析访客侧握手。

边界要分清:TLS Details 不是 CloudFront 到你源站之间那段连接的报告。ISP 名称也不能识别具体个人、证明 IP 属于住宅类型、证明某个平台的资格,或证明某次应用请求成功。

用源站请求策略转发

转发这两个头应使用 Origin Request Policy。AWS 明确说明,CloudFront-Viewer-ISP 只能加入源站请求策略,不能加入缓存策略,也不能通过旧式缓存设置添加。TLS 相关头(包括 CloudFront-Viewer-TLS-Details)同样应使用源站请求策略,而不是缓存策略。源站请求策略决定哪些信息随源站请求发送;缓存策略决定哪些信息参与缓存键。

把策略附加到实际承载测试路径和目标源站的那个缓存行为。这两个头不能加入缓存策略;保留源站请求策略与缓存键的区别。ISP 头也不能通过旧式缓存设置添加。

区分缺失、空值与 NONE

CloudFront 不会对 CloudFront-Viewer-ISP 的值做百分号编码;应将它作为头字段值处理,而不是 URL 片段。CloudFront 无法判断访客 ISP 时会省略该头。如果源站日志没有看到 ISP,先区分 CloudFront 没有可提供的值、所选行为没有转发该头,以及请求根本没有到达源站这几种情况。直接从缓存提供的请求不一定到达源站,因此源站日志并不逐次覆盖访客请求。

TLS-Details JSON 中的空字符串表示 CloudFront 无法确定该字段。NONE 的含义不同:字段对恢复会话不适用时会标为 NONE。TLS 1.2 恢复会话会把 keyExchange、signatureScheme 和 signaturePublicKeyType 设为 NONE;TLS 1.3 恢复会话仍包含新协商的 keyExchange,但两个签名字段为 NONE。不要把这几种状态合并成一个通用的“缺失值”。

逐项判断后量子信号

CloudFront-Viewer-TLS-Details 有六个字段:tlsVersion、cipherSuite、handshakeType、keyExchange、signatureScheme 和 signaturePublicKeyType。一个假设中的源站观测可以是:{"tlsVersion":"TLSv1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","handshakeType":"fullHandshake","keyExchange":"X25519MLKEM768","signatureScheme":"ecdsa_secp256r1_sha256","signaturePublicKeyType":"ecdsa_secp256r1"}。六个值都是字符串;这是说明字段格式的示例,不是实测结果。

keyExchange 为 X25519MLKEM768 表示协商出的密钥交换组,是判断访客到 CloudFront 这段连接的一个信号,但不代表所有密码学组成部分或签名都已具备后量子安全性。示例中的签名方案和证书公钥类型仍是 ECDSA。这个头也不说明 CloudFront 到源站那一跳使用了什么 TLS 算法。

源站只会看到实际到达源站的请求,例如,缓存未命中会触发源站请求。因此源站日志样本能说明源站观测到的请求,却不能单独代表所有访客,也不能直接当作全体访客的后量子比例。若要计算更广的比例,应先确认数据集覆盖哪些访客请求并明确分母。

只在自己的测试分发中验证

在你有权限管理的测试分发中,选定一个缓存行为和路径,将包含这两个头的源站请求策略附加到该行为,再请求一个尚未缓存的测试对象,使请求到达源站。检查源站收到的 ISP 原始字段,并把 TLS JSON 的六个字符串字段分别解析;记录整头缺失、JSON 空字符串和 NONE 的区别。

如果测试请求直接由缓存提供,源站没有对应记录并不能证明转发失败。先核对实际命中的缓存行为及其策略,再检查确实到达源站的请求。这是建议的验证顺序,本文没有报告实际分发测试结果。

资料来源

常见问题

已有 CloudFront-Viewer-TLS,还需要 TLS-Details 吗?

旧头提供 TLS 版本、密码套件和握手类型。TLS-Details 保留这三类信息,并增加 keyExchange、signatureScheme 和 signaturePublicKeyType。需要分析密钥交换或证书签名时,按 JSON 解析新头;不要沿用旧头的冒号分割格式。

NONE 和空字符串是同一种意思吗?

不是。空字符串表示 CloudFront 无法确定字段值;NONE 表示恢复会话中该字段不适用。TLS 1.2 恢复会话的三个加密字段都是 NONE,TLS 1.3 恢复会话仍有 keyExchange,而两个签名字段是 NONE。

看到 X25519MLKEM768,就能说整个连接都是后量子安全的吗?

不能。它是访客到 CloudFront 连接的 keyExchange 值;签名字段可能仍使用传统算法,且这个头不描述 CloudFront 到源站的连接。应分别解释各字段和连接边界。