赞
踩
本文简单介绍一下实际通信场景中HTTPS的报文结构。
图1
图1出自这里,很好的解释了HTTPS和HTTP在协议栈中的关系。可以看出HTTS总体上是由两部分来构成的,TLSRecord Layer Protocol和其他的一些子层协议,例如握手协议和http协议等。由图1可以看出Record Layer层作为低一层的协议来承载上层的数据,但是该层与上层(以握手协议层为例)到底在报文中是怎么样呈现的,这是本文要讨论的内容。我们知道hanshake protocol的四次握手过程如图2,出自阮一峰:
图 2
图1 和图2相结合会引发这样一个问题,以服务器端的应答为例,通常情况下服务器的应答会包含ServerHello,Certificate,以及ServerHelloDone等内容,那么按照图1 所示,当Record Layer来承载上层数据的时候,对着三条记录只是用一个Record Layer还是每个记录分别设置一个Record Layer。我以实际的抓包为例,来进行说明,具体如下:
情况一:
图 3
图3中Record Layer封装了服务器在握手协议期间的server hello
图4
图4 中Record Layer分别封装了服务器在握手协议期间的certificate 以及serverhello。
图3和图4说明了Record Layer是各自对每一条记录消息进行封装。
情况二:
图 5
图 5展示的是另外一种情况,即RecordLayer对三条记录统一封装。在实际分析的过程中情况一和情况二都找到了3.0,3.1,3.2,3.3这四种版本对应的实例。
图 6
图 6 中Record Layer封装了客户端的应答数据,即http数据。
还有一点需要注意的地方就是,对于服务器的应答,通常即含ServerHello,Certificate,ServerHelloDone这三条记录,一般分为若干个数据包来进行传输,但是在实际统计加密数据的过程中,发现Certificate最后的一部分内容和ServerHelloDone并不总是都存在于同一个数据包中,如图7所示,即使Certificate最后的一部分内容小于MTU。由于这个分开成为两个数据包传输的情形并不是个例,这种情形在解码的时候可能需要注意一下。
图7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。