用wireshark抓包分析TLS协议

一、SSL/TLS简介

1、协议介绍

SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。

SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。

SSL (Secure Socket Layer)安全套接字层协议

• SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。

• 分为SSL记录协议和SSL握手协议。

TLS(Transport Layer Security)传输层安全协议

• 用于两个应用程序之间提供保密性和数据完整性。

• 分为TLS记录协议和TLS握手协议。

区别:

• SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。

• TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的

2、SSL/TLS在TCP/IP协议栈的位置

在这里插入图片描述
​ SSL/TLS协议在传输层上封装了应用层的数据,因此可以在不需要修改应用层协议的前提下给不安全的应用层协议提供一定的安全保障。

3、SSL/TLS协议栈

在这里插入图片描述

4、SSL/TLS协议运作流程

在这里插入图片描述

o Client Hello:客户端向服务端打招呼;携带支持的协议、支持的安全套件供服务端选择;

o Server Hello:服务端回应客户客户端的招呼信息;结合客户端的信息,选择合适的加密套件;

o Certificate:服务端向客户端发送自己的数字证书(此证书包含服务端的公钥),以实现验证身份;

o Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);

o Server Hello Done:服务端向客户端表示响应结束;

o Client Key Exchange:客户端向服务端发送自己生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);

o Change Cipher Spec:变更密码规范;告知服务端/客户端,以后的通信都是基于AES加密的;

o Encrypted Handshake Message:基于协商生成的密钥,用AES加密验证信息让服务端/客户端进行认证;如果对方可以解密,则双方认证无误开始通信;

o New Session Ticket:是优化SSL连接的一种方法,此处不做特别说明

o 注:Certificate Request:服务器如果需要验证客户端的身份,那么服务器会发一个“Certificate Request”给浏览器,而在很多实现中,服务器一般不需要验证客户端的身份

二、分析过程

1、获取协议包

​ 启动wireshark,选择菜单栏上捕获 -> 选项,勾选WLAN网卡。点击Start。启动抓包。

在这里插入图片描述

​ 执行需要抓包的操作:在Chrome浏览器访问https://cn.bing.com/,捕获到的数据包如下

在这里插入图片描述

​ 在cmd上ping cn.bing.com以获得其IP地址

在这里插入图片描述

IP地址为202.89.233.101

​ 在过滤栏设置过滤条件进行数据包列表过滤:ip.addr == 202.89.233.100 and tls,表示只显示TLS协议且源主机IP或者目的主机IP为202.89.233.100的数据包。结果如下:

在这里插入图片描述

2、协议包分析:

(1)Client Hello包-137号

在这里插入图片描述

Random Bytes:客户端产生的28字节随机数,用于生成最终密钥,后面的过程还会传递两个随机数,三个随机数做为EC Diffie-Hellman算法的相关参数,运算出会话密钥。先把这个随机数称为random_c.

Session ID:会话标识符:如果是一个新的连接,这个值为0

Cipher Suites:加密套件(客户端共支持17个加密套件),服务器会从中选择一个服务器也支持的加密套件

Compression Methods:客户端支持的压缩方法

Extension: ALPN:客户端支持的应用层协议

Extension: signature_algorithms: 客户端支持的签名算法

(2)Server Hello, Certificate, Certificate Status, Server Key Exchange, Server Hello Done包-146号

A、Server Hello段

在这里插入图片描述

Random Bytes:服务器生成的随机数random_s

Cipher Suites:服务器选择的加密套件:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

在这里插入图片描述

Compression Methods:服务器选择的压缩算法为NULL压缩算法。(不支持任何压缩算法),压缩基本由应用层来完成。

B、Certificate段

在这里插入图片描述

Certificate: 服务器返回了两个证书: 第一个是CA签发的证书(Bing),第二个是CA链的证书。

客户端收到这个证书后,可以根据证书链来验证证书的真伪,进而判断服务器是真是假。 服务器证书中存放一个公钥,用于加密后面生成的Premaster secret

C、Server Key Exchange段

在这里插入图片描述

EC Diffie-Hellman: 服务器和浏览器是通过Diffie-Hellman算法来生成最终的密钥

Pubkey: 服务器向客户端发送了Pubkey这个随机数。

此时客户端已经拥有了三个随机数(自身生成的random_c, 服务器发送的random_s以及此处的pubkey),有了这三个参数,就可以运行Diffie-Hellman算法生成Premaster secret(最终的会话密钥)

D、Server Hello Done段

在这里插入图片描述

告知客户端服务器这边握手相关的消息发送完毕。

(3)Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 包-149号

A、Client Key Exchange段

在这里插入图片描述

Pubkey: 浏览器收到服务器发来的Certificate包来之后,运行Diffie-Hellman算法生成一个pubkey,然后发送给服务器。

通过这一步和上面Certificate两个步骤,服务器和浏览器分别交换了pubkey,这样他们就可以分别生成了一个一样的sessionkey。

B、Change Cipher Spec段

在这里插入图片描述

变更密码规范协议,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;

C、Encrypted Handshake Message段

在这里插入图片描述

客户端使用生成的对话密钥,加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。

注意:Change Cipher Spec和Encrypted Handshake Message不像Client Hello、Server Hello等是封装在 Handshake Protocol层,而是同Handshake Protocol一样,直接封装在TLS Record Layer层。

(4)Application Data包-150号

在这里插入图片描述

客户端开始向服务器发送加密数据。我们可以看到,它使用的是http2协议,数据被加密了。

(5)Change Cipher Spec, Encrypted Handshake Message包-155号

在这里插入图片描述

Change Cipher Spec:服务器发送Change Cipher Spec消息,通知客户端此消息以后服务器会以加密方式发送数据。服务器使用会话密钥加密之前所有收发握手消息的Hash和MAC值,发送给客户端去校验。

若客户端服务器都校验成功,握手阶段完成,双方将按照SSL记录协议的规范使用协商生成的会话密钥加密发送数据。

可以看到,之后服务器开始向客户端发送加密消息Application Data。

参考资料

[1] https://blog.csdn.net/darker0019527/article/details/103337897
[2] https://blog.51cto.com/liuzhengwei521/2430427
[3] https://zhuanlan.zhihu.com/p/227873665
[4] https://blog.csdn.net/liangyihuai/article/details/53098482
[5] https://www.freebuf.com/articles/network/116497.html

  • 24
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值