2

根据RFC 8446(TLSv1.3) [https://www.rfc-editor.org/rfc/rfc8446]

Encrypted Extension并且Finished是两个不同的握手消息。

但在 RFC 8448(TLS 1.3 握手跟踪示例)[https://www.rfc-editor.org/rfc/rfc8448]

在此跟踪文档的所有示例中,Encrypted Extension(消息类型 0x08)和Server Finished (消息类型 0x14)消息被连接在一起并一起发送。

请参阅 RFC 8446 的第 23 和 24 页。

payload (80 octets):  **08** 00 00 28 00 26 00 0a 00 14 00 12 00 1d 00
         17 00 18 00 19 01 00 01 01 01 02 01 03 01 04 00 1c 00 02 40 01
         00 00 00 00 00 2a 00 00 **14** 00 00 20 48 d3 e0 e1 b3 d9 07 c6 ac
         ff 14 5e 16 09 03 88 c7 7b 05 c0 50 b6 34 ab 1a 88 bb d0 dd 1a
         34 b2

我知道通过将两个握手消息(如果它们由一个实体一个接一个地立即发送)一起添加将提高性能,并且 RFC 8446 提供了这一规定。

但这真的是任何服务器实现都必须一起发送Encrypted ExtensionServer Finished消息的吗?

或者服务器和客户端应该支持这两种实现,即

a) 分别发送Encrypted ExtensionServer Finished消息。

b) 在一个握手消息中同时发送Encrypted ExtensionServer Finished消息。

4

1 回答 1

2

TLS 通过 TCP 发送。TCP是一个字节流,没有消息的概念,因此也没有“消息一起发送”的概念。两个send在应用程序级别或来自 TLS 堆栈中的两个可能最终位于同一个 TCP 数据包中,就像一个send可能分布在多个 TCP 数据包中一样。

换句话说:由于 TLS 底层的 TCP 层只是一个字节流,可以以不受上层控制的任意方式打包,因此不可能遵循在同一个 TCP 数据包中发送多个 TLS 消息的强制性要求。

于 2019-12-07T12:33:16.707 回答