最近在看数字证书,https相关的知识,发现之前也是模棱两可的了解,一点都不深入,这篇文章从DNS解析开始,分析打开https的网站从开始到结束的过程。

在从地址栏敲入域名之后,首先进行DNS的域名解析,抓包如下:

1、DNS请求&DNS解析阶段

​ 1.1、本机向DNS服务器发起DNS解析请求,使用UDP协议,报文结构如下:

​ 1.2、服务器向客户端发送请求的结果,同样使用UDP协议,报文结构如下:

​ 1.3、answers结果如下:

​ 由于网站托管在又拍云上,部署了CDN,所以先回返回一个cname的解析结果到我绑定的域名。

1567566039341

至此,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://www.jianshu.com/p/a3a25c6627ee