TLS1.3抓包分析(2)——ServerHello

  • Post author:
  • Post category:其他


继续上次的报文分析,这次主要内容是TLS握手中的ServerHello消息。

SververHello

首先是记录层(Record Layer)内容,

Content Type

表示内容类型为握手(Handshake),

Version

表示版本为TLS1.2,接下来是长度(

Length

)。

后面是握手协议部分的内容,我将逐个解释(其实大部分都和ClientHello的内容类似):


Handshake Type

:ServerHello,表示握手消息类型,此处是ServerHello。


Length

:118,表示ServerHello的长度。


Version

:TLS1.2(0x0303),表示版本号为1.2。

在TLS1.3的草案当中规定此处必须置为0x0303,即TLS1.2,起到向后兼容的作用。1.3版本用来协商版本号的部分在扩展当中,而之前的版本就在此处进行。



Random

,随机数,由服务器生成,必须独立于ClientHello.random的生成(即客户端和服务器的随机数是分别独立生成的)。


Session ID Length

:会话ID的长度。


Session ID

,会话ID,TLS 1.3之前的版本支持“会话恢复”功能,该功能已与1.3版本中的预共享密钥合并。为了兼容以前的版本,该字段必须是非空的,因此不提供TLS 1.3之前会话的客户端必须生成一个新的32字节值。该值不必是随机的,但应该是不可预测的,以避免实现固定在特定值。


Cipher Suites Length

,即下面Cipher Suites的长度。


Cipher Suites

:密码套件,此处为

TLS_AES_128_GCM_SHA256

,服务器从ClientHello.cipher_suites的列表中选择的单个密码套件。


Compression Methods

:压缩方法,TLS1.3中未涉及,所以固定长度为1,内容为空。

后面是扩展(Extensions)的内容,ServerHello的扩展只包括了两个内容,共享密钥和所支持的版本:


key_share

:共享密钥,如图

key_share

这里的类型跟长度不再解释,Key Share Entry中只包含了一个曲线组x25519(从ClientHello.key_share选择的结果),在Key Exchange中包含的就是相关参数。


supported_versions

:服务器所支持的TLS版本号,进行版本号的协商,如图:

supported_versions

此处是服务器在ClientHello.Versions上的选择,此处服务器选择了1.3版本。

当使用带有(EC)DHE密钥建立的PSK时,当前的ServerHello消息需包含 “pre_shared_key”和“key_share”扩展,其他扩展将在EncryptedExtensions消息中单独发送。

TLS 1.3具有嵌入在服务器随机值中的降级保护机制,响应ClientHello并协商TLS 1.2或更低版本的TLS时,服务器必须专门设置其Random值的最后8个字节。

如果协商TLS 1.2,TLS 1.3服务器必须将其Random值的最后八个字节设置为字节:


44 4F 57 4E 47 52 44 01


如果协商TLS 1.1或更低版本,TLS 1.3服务器必须和TLS 1.2服务器应该将其Random值的最后8个字节设置为字节:


44 4F 57 4E 47 52 44 00


客户端接收到ServerHello之后也将对随机数中的这8个字节进行检查,如果不匹配将会利用警报协议停止握手。

这里在ServerHello后面还有一点内容,即Change Cipher Spec,如图:

Change Cipher Spec


Change Cipher Spec

的目的是为了告知客户端,之后的消息将会加密传输;在1.2及之前的版本中都包含Change Cipher Spec,所以在TLS1.3中为了

保证兼容性

,也保留了这一部分。

同步简书:

简书-汪哈哈zzz



版权声明:本文为qq_36058927原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。