最近在看数字证书,https相关的知识,发现之前也是模棱两可的了解,一点都不深入,这篇文章从DNS解析开始,分析打开https的网站从开始到结束的过程。
在从地址栏敲入域名之后,首先进行DNS的域名解析,抓包如下:
1、DNS请求&DNS解析阶段
1.1、本机向DNS服务器发起DNS解析请求,使用UDP协议,报文结构如下:
1.2、服务器向客户端发送请求的结果,同样使用UDP协议,报文结构如下:
1.3、answers结果如下:
由于网站托管在又拍云上,部署了CDN,所以先回返回一个cname的解析结果到我绑定的域名。
至此,DNS解析的阶段已经完成,只有两个包,客户端得到了服务端的IP地址,61.179.240.145
接下来就是客户端与服务端的交换。
3、开始进行TCP三次握手,抓包如下:
图中可以看到,TCP三次握手已经完成,连接建立,在此大概说一下TCP三次握手的流程,可以参考下文链接。
原文链接:https://juejin.im/post/5b29d2c4e51d4558b80b1d8c
4、建立过后,开始进行数据的传输
因为网站使用了https加密,在wireshark中使用追踪TLS流的功能进行过滤,所以可以看到如下报文:
我们关注图中TLSV1.2的报文即可,报文记录了SSL握手从开始到结束的全过程,这也是笔者最近学习的,下面只是个人的理解,如有纰漏还请指出。
4.1、客户端发起client hello请求。
其中包括了,浏览器给出协议的版本号为TLS 1.2,一个客户端生成的random随机数
支持下列加密算法。
其他相关参数。
签名算法,服务器名称等等。
汇总来说,这一步进行了下列操作。
TLS的版本
随机数:这个是用来生成最后加密密钥的影响因子之一,包含两部分:时间戳(4-Bytes)和随机数(28-Bytes)
session-id:用来表明一次会话,第一次建立没有。如果以前建立过,可以直接带过去。后面的扩展内容会详细讲到。
加密算法套装列表:客户端支持的加密-签名算法的列表,让服务器去选择。
压缩算法:似乎一般都不用扩展字段:比如密码交换算法的参数、请求主机的名字等等
4.2、服务端响应Server hello给客户端。
其中包含的信息和client hello有异曲同工之妙。
4.3、服务端server hello完成。
这个报文中包含了两方面的信息,一个是
写一半太忙,不想写了,这篇文章写得比我好。
- 本文链接:https://zeozzz.github.com/2019/08/28/75/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。