HTTP 建立请求的过程&&tls解密

来源:互联网 发布:手机怎么登陆淘宝客服 编辑:程序博客网 时间:2024/06/15 19:35

HTTP HyperText Transfer Protocol 超文本传输协议, 是一个客户端和服务器端建立请求和应答的过程,使用TCP协议(按顺序组织数据,可以纠正错误)

1.在开始之前,我们需要知道访问域名的IP地址,这个转换过程也就是dns协议,首先浏览器会先搜索本机的dns缓存。若本机中没有该域名的dns缓存,则会向网络运营商提出请求,查看其dns缓存。 若网络运营商的dns列表中还没有该域名对应的ip地址,则向具体的域提出请求,如.com域

2.在查到要访问的ip地址后,客户端会向服务器端发送建立链接的请求,也就是我们所熟知的三次握手。

  (1)客户端发送建立链接的请求:ACK=0 (表示确认号无效),SYN = 1 (表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据),seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包。通常seq不从0开始,而是从一个随机任意数开始,第一是出于安全原因,从0开始容易被第三方中间人猜测到,截获tcp链接。 第二是因为避免不同链接之间的冲突,若第一次链接我们使用seq=0, 在传输seq=200时丢失,当该链接关闭,从新建立一个新链接又从seq=0开始,此时我们可能接受到原来的seq=200的数据; 若我们从seq=400开始,若seq=500丢失,下一个链接的seq=8009,则此时下一个链接完全可以判断seq=500的信息不属于这次链接),这时候Client进入syn_sent状态,表示客户端等待服务器的回复

     (2)服务器端接受到客户端发来的请求,并同意建立链接, 此时他会发送:ACK=1,SYN=1,ack=x+1(表示之前发送x包已经接受,请从x+1开始发送),seq=y(表示服务器的开始序列号)

      (3)客户端接收到服务器端同意建立请求的信息,并向服务器发送确认收到信息:ACK=1, ack=y+1, seq=x+1

3.在TCP链接的三次握手完成后, 我们就可以看到HTTP请求,

4.因为现在的http协议都经过tls加密,也就是说在传输层之上的内容我们无法看到,某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。Firefox 和 Chrome 都支持生成上述方式的文件,具体格式见这里:NSS Key Log Format。但 Firefox 和 Chrome 只会在系统环境变量中存在 SSLKEYLOGFILE 路径时才会生成它,先来加上这个环境变量(以 OSX 为例)

  (1)mkdir ~/tls && touch ~/tls/sslkeylog.log 新建一个存储sslkeylog的日志文件

(2)设置环境变量:export SSLKEYLOGFILE=~/tls/sslkeylog.log

(3)打开wireshark在偏好设置中找到ssl协议,并将其中pre-master的路径改为上述sslkeylog的路径,如图wiresharkssl所示


(4)在命令行中打开所使用的浏览器

此时就可以看到解密后的内容,如图option1所示