TLS Client Hello 请求在 iOS 或 Android 中包含未知版本

TLS Client Hello request contains unknown version in iOS or Android

我注意到我的 iOS 和 Android 的本地移动应用程序由于未知原因在俄罗斯的某些供应商处停止工作。 我对 Wireshark 的快速研究向我展示了这种行为的原因(我错了 - 请参阅下面的 post 更新):

如果 TLS 客户端 Hello 数据包在 supported_version 字段中包含未知版本,它会被提供商的 DPI 阻止,我的后端服务器不会收到它。

但与此同时,当我尝试从 JS 浏览器或 Insomnia 发出相同的 REST API 请求时,它有效并且 TLS 客户端 Hello 数据包不包含任何“未知版本”。

未知版本的TLS每次随机变化,可能是: 0xbaba、0xcaca、0x1a1a 等等 - 任何 0xaa 模板。

我不确定,但怀疑这种过滤是由于我国大多数供应商开始使用的政府防火墙设备而发生的,因为在没有这种设备的网络上不会发生这种问题。因此很遗憾,我无法在提供商方面解决此问题。

如何强制我的 Swift 和 Kotlin 应用程序不在 TLS 协议中使用这个未知版本?

更新: 看来,不受支持的版本并不是这种行为的原因。 当我在同一台设备上的 Safari 中打开此 URL 时,它也包含在数据包中。

但我发现 TLS 数据包的另一个不同之处:

此数据包被阻止(我的应用程序):

此数据包已通过(Safari):

更新 2: 设置 NSExceptionRequiresForwardSecrecy=NO 解决了这个问题。

虽然您现在已经确定通过禁用前向保密要求解决了问题,但我将留下我对您最初提出的未知 TLS 版本问题的解释。

原回答

这些是 GREASE 值,旨在淘汰不能正确支持未知 TLS 版本的系统。

看起来它正在做它的工作,他们部署的任何过滤系统都有 GREASE 想要找到的错误。

不幸的是,除了尝试向供应商报告问题外,您无能为力。