我正在反转一个Android应用程序,并且在嗅探时发现有些奇怪的事情发生。
TLSv1.3引入了一些新密码,例如
而且,根据我对OpenSSL文档(https://wiki.openssl.org/index.php/TLS1.3)的了解,
有一些新的密码套件只能在TLSv1.3中使用。旧的密码套件不能用于TLSv1.3连接,而新的密码套件不能用于TLSv1.2及以下版本。
它在“客户端问候”期间使用带有新TLSv1.3密码的TLSv1.2,并且服务器也支持TLSv1.3,允许它,并且由于某种原因,它们开始通信。
那怎么可能?谢谢。
答案 0 :(得分:1)
不,我想您缺少一个重要的新方面(我看不到链接的图像,您应该在问题本身内发布所有相关数据)。
出于兼容性原因,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被确定为具有 legacy_version为0x0303,supported_versions扩展名 当前的最高版本为0x0304。 (有关向后兼容性的详细信息,请参阅附录D。)
对于密码套件和TLS版本,情况更为复杂。出于规范中说明的原因,TLSv1.3仅将其中的一部分标准化为强制性的。 但是,这也不严格禁止其他TLS版本使用它们。
请参阅:
“ AES GCM”家族是10年前在https://tools.ietf.org/html/rfc5116中定义的 TLSv1.3仅在完美的前向隐私上进行了标准化,因此,如果不使用PSK,则仅意味着(EC)DHE密钥交换(请参阅RFC8446第2部分)
看看https://security.stackexchange.com/a/77018/137710和https://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()手册页。
(https://github.com/openssl/openssl/pull/5392)
下表中的https://support.cloudflare.com/hc/en-us/articles/200933580-What-cipher-suites-does-CloudFlare-use-for-SSL-上的CloudFlare文档如下:
尽管TLS 1.3使用与以前版本的TLS相同的密码套件空间,但TLS 1.3密码套件的定义有所不同,仅指定了对称密码,不能用于TLS 1.2。同样,TLS 1.2和更低密码套件不能与TLS 1.3(IETF TLS 1.3草案21)一起使用。