在 TLS supported_versions 扩展中发送的此协议版本是啥

Posted

技术标签:

【中文标题】在 TLS supported_versions 扩展中发送的此协议版本是啥【英文标题】:What is this protocl version sent in the TLS supported_versions extension在 TLS supported_versions 扩展中发送的此协议版本是什么 【发布时间】:2020-11-29 17:17:18 【问题描述】:

我正在使用 Chrome 版本 85.0.4183.83(官方版本)(64 位)检查 TLS 客户端 hello 的简单连接。 有一个带有奇怪代码编号的意外版本标记为“未知”。我知道 TLS 版本,标准中注明了它们的编号。我看着奇怪的版本号,无法弄清楚。 谁能帮我确定这个未知的版本号是什么? Chrome 是否出于任何目的这样做?

这是版本:

Supported Version: Unknown (0x3a3a)

看这个截图: https://i.imgur.com/NT70mRg.png

【问题讨论】:

【参考方案1】:

这是 TLS “Grease”的一部分,其中 TLS 客户端发送不存在的密码套件、支持的版本、TLS 扩展等,以确保 TLS 堆栈的实现不会过多依赖于他们所见过的特定实现在电线上。

过去的实施通常并未真正实施标准,而是根据现实世界中使用的内容做出假设。这导致这些实现在更新的 TLS 版本、新密码等方面失败。这使得有必要通过诸如 TLS 降级等导致其自身问题的事情来解决此类损坏的 TLS 堆栈。

为了清理这些混乱并在 TLS 堆栈中强制执行更健壮的行为,一些 TLS 实现(如 Chrome 中的 BoringSSL)添加了 RFC 8701 中定义的随机内容。

【讨论】:

谢谢。我只知道 Chrome 在密码套件中的这个技巧。但从未在 TLS 版本中阅读过任何有关它的内容。 @seq:其实我直到现在才意识到这一点。但由于它看起来与我刚刚查看 RFC 并发现supported_version 的机制相同。

以上是关于在 TLS supported_versions 扩展中发送的此协议版本是啥的主要内容,如果未能解决你的问题,请参考以下文章

在高级设置中启用 TLS 1.0、TLS 1.1 和 TLS 1.2,

尝试使用此代码在 TLS 上运行 TLS 时,为啥会出现握手失败?

TLS 详解

SSL和TLS的区别

TLS使用指南:如何在Rancher 2.x中进行TLS Termination?

HTTPS 中的 TLS 过程