是否可以在TLSv1.2会话中使用TLSv1.3密码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以在TLSv1.2会话中使用TLSv1.3密码?相关的知识,希望对你有一定的参考价值。

我正在逆转一个android应用程序,我注意到,在嗅探时,发生了一些奇怪的事情。

TLSv1.3引入了一些新的密码,如

  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_128_CCM_8_SHA256
  • TLS_AES_128_GCM_SHA256

而且,从我读过的OpenSSL文档(https://wiki.openssl.org/index.php/TLS1.3),

有新的密码套件只适用于TLSv1.3。旧的密码套件不能用于TLSv1.3连接,新的密码套件不能用于TLSv1.2及以下版本。

现在,这个应用程序做了一些非常奇怪的事情:https://i.imgur.com/HPbFbvc

在“Client Hello”和服务器之间使用TLSv1.2和新的TLSv1.3密码,服务器也支持TLSv1.3,允许它并且由于某种原因它们启动通信。

怎么可能?谢谢。

答案

不,你错过了我认为的一个重要的新方面(我看不到你的链接图像,你应该在问题本身内发布所有相关数据)。

出于兼容性原因,TLSv1.3在ClientHello期间尝试将其自身屏蔽为TLSv1.2,请参阅https://tools.ietf.org/html/rfc8446#section-4.1.2

4.1.2。客户你好

当客户端首次连接到服务器时,需要将ClientHello作为其第一个TLS消息发送。

此消息的结构:

  uint16 ProtocolVersion;
  opaque Random[32];

  uint8 CipherSuite[2];    /* Cryptographic suite selector */

  struct {
      ProtocolVersion legacy_version = 0x0303;    /* TLS v1.2 */
      Random random;
      opaque legacy_session_id<0..32>;
      CipherSuite cipher_suites<2..2^16-2>;
      opaque legacy_compression_methods<1..2^8-1>;
      Extension extensions<8..2^16-1>;
  } ClientHello;

请注意,legacy_version实际上是TLSv1.2,然后是解释:

legacy_version:在以前版本的TLS中,此字段用于版本协商,并表示客户端支持的最高版本号。经验表明,许多服务器没有正确实现版本协商,导致“版本不容忍”,其中服务器拒绝版本号高于其支持的其他可接受的ClientHello。在TLS 1.3中,客户端在“supported_versions”扩展(第4.2.1节)中指示其版本首选项,并且legacy_version字段必须设置为0x0303,这是TLS 1.2的版本号。 TLS 1.3 ClientHellos被标识为具有0x0303的legacy_version和具有0x0304的supported_versions扩展,作为其中指示的最高版本。 (有关向后兼容性的详细信息,请参阅附录D.)

至于密码套件和TLS版本,情况更复杂。由于规范中解释的原因,TLSv1.3仅将其中的一些标准化为强制性的。但是,这并不严格禁止其他TLS版本使用它们。

看到:

“AES GCM”系列是10年前在https://tools.ietf.org/html/rfc5116 TLSv1.3中定义的,仅标准化了完美的前向隐私,因此仅表示(EC)DHE密钥交换,如果不使用PSK(参见RFC8446的第2节)

看看https://security.stackexchange.com/a/77018/137710https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices#23-use-secure-cipher-suites

但是TLSv1.3密码套件的定义不同(新名称),因为它们将其他扩展中的某些部分分开。

因此,您将在OpenSSL更新日志中看到此警告:

从TLSv1.2密码套件配置中分离出TLSv1.3密码套件配置。 TLSv1.3密码套件与TLSv1.2及以下版本不兼容。类似地,TLSv1.2密码套件与TLSv1.3不兼容。为了避免传统TLSv1.2密码套件配置无意中禁用所有TLSv1.3密码套件的问题,配置已被分离出来。有关更多信息,请参见密码手册页或SSL_CTX_set_ciphersuites()手册页。

(Qazxswpoi)

关于https://github.com/openssl/openssl/pull/5392的CloudFlare文档如下表所示:

尽管TLS 1.3使用与先前版本的TLS相同的密码套件空间,但TLS 1.3密码套件的定义不同,仅指定对称密码,不能用于TLS 1.2。类似地,TLS 1.2和较低密码套件不能与TLS 1.3一起使用(IETF TLS 1.3草案21)。

以上是关于是否可以在TLSv1.2会话中使用TLSv1.3密码?的主要内容,如果未能解决你的问题,请参考以下文章

SSL/TLS对称加密和非对称加密和TLSv1.3

如何使 OpenSSL C 服务器仅支持 TLS 1.3?

通过任何 SSL 或 TLS 版本的 HTTPS 连接

Nginx-加密会话

使用 TLSv1.3 时是不是可以为 TLS 连接设置设置密码套件?

网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?