TLS/SSL报文格式探究

  本文简单介绍一下实际通信场景中HTTPS的报文结构。TLS/SSL报文格式探究_第1张图片

图1

  图1出自这里,很好的解释了HTTPS和HTTP在协议栈中的关系。可以看出HTTS总体上是由两部分来构成的,TLSRecord Layer Protocol和其他的一些子层协议,例如握手协议和http协议等。由图1可以看出Record Layer层作为低一层的协议来承载上层的数据,但是该层与上层(以握手协议层为例)到底在报文中是怎么样呈现的,这是本文要讨论的内容。我们知道hanshake protocol的四次握手过程如图2,出自阮一峰:TLS/SSL报文格式探究_第2张图片

 

图 2

  图1 和图2相结合会引发这样一个问题,以服务器端的应答为例,通常情况下服务器的应答会包含ServerHello,Certificate,以及ServerHelloDone等内容,那么按照图1 所示,当Record Layer来承载上层数据的时候,对着三条记录只是用一个Record Layer还是每个记录分别设置一个Record Layer。我以实际的抓包为例,来进行说明,具体如下:

  情况一:

TLS/SSL报文格式探究_第3张图片

图 3

  图3中Record Layer封装了服务器在握手协议期间的server helloTLS/SSL报文格式探究_第4张图片

 

图4

  图4 中Record Layer分别封装了服务器在握手协议期间的certificate 以及serverhello。

  图3和图4说明了Record Layer是各自对每一条记录消息进行封装。

  情况二:TLS/SSL报文格式探究_第5张图片

 

图 5

  图 5展示的是另外一种情况,即RecordLayer对三条记录统一封装。在实际分析的过程中情况一和情况二都找到了3.0,3.1,3.2,3.3这四种版本对应的实例。TLS/SSL报文格式探究_第6张图片

图 6

  图 6 中Record Layer封装了客户端的应答数据,即http数据。

  还有一点需要注意的地方就是,对于服务器的应答,通常即含ServerHello,Certificate,ServerHelloDone这三条记录,一般分为若干个数据包来进行传输,但是在实际统计加密数据的过程中,发现Certificate最后的一部分内容和ServerHelloDone并不总是都存在于同一个数据包中,如图7所示,即使Certificate最后的一部分内容小于MTU。由于这个分开成为两个数据包传输的情形并不是个例,这种情形在解码的时候可能需要注意一下。TLS/SSL报文格式探究_第7张图片

图7

 

 

你可能感兴趣的:(wireshark,你不知道的wireshark)