美文网首页
TLS1.3抓包分析(2)——ServerHello

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

作者: 汪哈哈zzz | 来源:发表于2019-03-04 16:01 被阅读0次

    继续上次的报文分析,这次主要内容是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中为了保证兼容性,也保留了这一部分。

    相关文章

      网友评论

          本文标题:TLS1.3抓包分析(2)——ServerHello

          本文链接:https://www.haomeiwen.com/subject/sxyiuqtx.html