使用WireShark深入理解HTTPS原理

前端开发,移动开发,后台开发,都应该知道HTTP通信,而且现在一些大厂都已经使用HTTPS进行通信,那HTTPS到底是什么呢,有什么好处呢?

 

一.为什么要使用HTTPS

http是一种通信上极为简便的协议,他本身不带有安全功能,http包在网络上传输的过程中难免会被人窃听,篡改甚至拦截。有时候一些比较隐私的数据比如个人账号密码身份证号码,银行卡账号密码,是绝对不能被人知道的,那这个时候该怎么办呢?所以这个时候就出现了HTTPS,他不是一种新的协议,是在HTTP和TCP层之间添加了一个SSL层,也就是把HTTP的包,经过加密后,再发给TCP传输出去。

二.简单介绍HTTPS的主要功能

1.身份认证

HTTPS具备身份认证功能,也就是客户端和服务端在相互通信的时候,需要互相认证身份(有时候只需要认证服务端身份),才可以建立连接,保证了双方身份的有效性。

2.加密通信

把HTTP的报文,主要是报文主体部分,经过对称加密,把密文部分拿去传输,保证了通信的数据主体不会被泄漏(因为就算被监听到了,拿到的也是密文,没有密钥是无法破解的)

3.数据完整性

三.HTTPS建立连接的9次握手及WireShark抓包分析

1.简单介绍WireShark抓包使用方法

首先打开WireShark后双击这里Wi-Fi:en0,就会进入监听页面

通过这个图可以清晰得看到每个请求的Time, Sourece(请求端IP), Destination(接收端IP), Protocol(协议类型), Length, Info。这里我说清晰的看到,其实也是昧着良心说的,哪里清晰了,数据一大堆,我请求了一个HTTP请求完全就是石沉大海了,根本找不到嘛。所以最重要的其实还是要会使用过滤器。

先介绍几种过滤器的常用方法:

1.过滤协议类型

比如我只想看到HTTP请求,就在过滤栏中输入http那就只看到http相关的请求了。

然后这里有一个小技巧,HTTP一般是成对出现的, 也就是请求和响应,所以当你点击某一个数据的时候,在最左边,会出现向右的箭头和向左的箭头,这个就是一对请求和响应,这里是因为请求和响应都在一起,所以看起来没那么重要,但是当请求和响应集中爆发的时候,就可以看出他的作用了。

2.根据请求和响应的IP地址来过滤

比如我只想要发给IP为61.151.234.53的请求和响应,那就在过滤栏中输入“ip.src == 172.28.104.232 and ip.dst == 61.151.234.53”,这样就把其他的数据都过来掉了。

然后要查看这些请求的具体报文,就可以点击具体一条看下面的数据

这里可以看到,Internet Protocol(也就是IP协议,网络层)Transmission Control Protocol(TCP协议,传输层) Hypertext Transfer Protocol(HTTP协议,应用层)我们最关系的当然是HTTP层了,可以在这里看到URI Method及各个Header。

2.HTTPS实现原理简介

1.要使用HTTPS进行通信的服务端,需要向CA机构申请数字证书,来证明自己身份的有效性。

2.当客户端请求的时候,把证书发给客户端,客户端验证证书有效,也就是认证了服务端的有效性,并且拿出数字证书中包含的公钥

3.客户端生成一个随机数,使用公钥加密,并且传递给服务端

4.服务端用私钥解密,拿到随机数。之后客户端和服务端就用这个随机数进行加密通信

小结:HTTPS最关键的就是使用数字证书来证明服务器的有效性,然后使用非对称加密来传递对称加密的密钥。这里要说明的是,实际使用中对称加密的密钥,并不是直接由客户端生成的随机数,这里为了说明方便而简单这样理解。实际上的对称加密密钥是要根据协商的加密算法组件来决定的。

3.祭出一张《图解HTTP》中关于HTTPS握手的流程图以及对应的WireShark抓包

这里我们主要观察ssl,所以添加了ssl过滤,以及添加了目标IP地址过滤。这里可以看到,上下两图,是基本可以对应上的。

1.Client Hello

这是客户端发送请求给服务端

在这里可以看到,SSL使用的版本是TLSv1.2,然后这里发送了一个客户端生成的随机数Random,这个在后面会使用到,然后还有Cipher Suites这个是客户端支持的加密算法组件,客户端把这个加密算法组件发给服务端,服务端会从里面选出一个最适合的组件来进行加密通信。

2.Server Hello

 

这里可以看到,服务端也返回了一个Random给客户端,并且把选中的加密算法组件发送给客户端

3.Certificate

这一步是服务端把数字证书发给客户端

证书中包含了服务端非对称加密的公钥,客户端验证通过后会取出来,用作后续加密使用

4.Server Key Exchange Serve Hello Done

这一步中的Server Key Exchange是《图解HTTP》流程图中缺少的,这一步也是根据具体算法组件决定的,这里采用了DH算法,所以需要服务端传递参数到客户端。

Server Hello Done就是告诉客户端这一阶段结束了。

5.Clinet Key Exchange, Change Cipher Spec, Multiple Handshake Messages

Clinet Key Exchange是客户端生成随机数作为pre-master-secret,然后使用刚才从证书中拿到的公钥进行加密,然后传递给服务端。

Change Cipher Spec是客户端告诉服务端,以后的消息都是通过加密后的

Multiple Handshake Messages是告诉服务端,这一阶段结束了,并且在这一过程中,通过客户端Random, 服务端Random和pre-master-secret生成了master-secret来作为之后通信对称加密的密钥。

6.Change Cipher Spec Handshake Message

Change Cipher Spec是服务端告诉客户端,之后的通信是通过加密后的通信。

Handshake Message在这个过程中,服务端也通过客户端Random, 服务端Random和pre-master-secret生成了master-secret来作为之后通信对称加密的密钥。

7.ApplicationData

到了这里,SSL的握手连接算是完成了,这里就是试着完成一次HTTP通信,发送的数据,也是经过密钥加密的。在此之后的所有通信都是通过密钥加密的。直到断开连接,下次通信又需要以上握手连接。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值