HTTPS对中间人真就束手就擒了?

1.简介

由于近几年来各大网站越来越注重安全性都改成了https协议,不像前十几年前直接是http协议直接裸奔在互联网。HTTPS 从协议上解决了 HTTP 时代的中间人攻击问题,但是 HTTPS 在用户主动信任了伪造证书的时候也会发生中间人攻击(比如早期的 12306 需要手动信任证书),所以从这一角度来看,HTTPS对中间人也不能完全束手就擒了。

2.什么是HTTPS?

HTTPS就是加过密的HTTP。使用HTTPS后,浏览器客户端和Web服务器传输的数据是加密的,只有浏览器和服务器端知道内容。

HTTPS = HTTP + TLS或者SSL。采用HTTPS的网站需要数字证书认证机构(Certificate Authority,CA)申请证书。

通过这个证书,浏览器在请求数据前与Web服务器有几次握手验证,以证明相互的身份,然后对HTTP请求和响应进行加密。

3.HTTPS协议传输的原理

大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密来实现。但其实,HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。

HTTPS的整体过程分为证书验证和数据传输阶段

HTTPS协议传输的原理和过程简图如下所示:

上图图解说明:

① 证书验证阶段

客户端发起 HTTPS 请求

服务端返回 HTTPS 证书

客户端验证证书是否合法,如果不合法则提示警告

② 数据传输阶段

1.当证书验证合法后,在本地生成随机数

2.通过公钥加密随机数,并把加密后的随机数传输到服务端

3.服务端通过私钥对随机数进行解密

4.服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输

4.Fiddler捕获Http协议会话

Fiddler是一个很好的抓包工具,默认是抓Http协议请求的(比较简单的,自己可以百度一下),但是不会捕获Https协议会话,需要你进一步配置才能抓取Https会话。如下图所示:

5.Fiddler抓取HTTPS原理

现在无论是网站还是APP中的数据传输基本上都使用HTTS传输,传输的数据都是经过加密的,这增加了我们分析数据包的难度,还好Fiddler除了可以抓取HTTP数据包,还可以抓取HTTPS数据包。由于HTTPS传输需要使用到CA证书,所以抓取抓取HTTPS数据包时需要做一些特殊配置。Fiddler截取HTTPS报文的流程大致如下:

上图图解说明:

1) 客户端请求建立HTTPS链接,发送客户端支持的加密协议及版本列表等信息给服务器端。

2) Fiddler接受客户端请求并伪装成客户端向WEB服务器发送相同的请求。

3) WEB服务器收到Fiddler的请求以后,从请求中筛选合适的加密协议。并返回服务器CA证书,证书中包括公钥信息。

4) Fiddler收到WEB服务器的响应后保存服务器证书并自签名一个CA证书,伪装成服务器,把该证书下发给客户端。

5) 客户端验证证书合法性。(Fiddler能否抓取到HTTPS报文关键看这一步)。

6) 客户端生产对称密钥,通过证书的公钥加密发送给服务器。

7) Fiddler拦截客户端的请求以后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给WEB服务器。此时对称密钥已经泄露了,以后可以使用该秘钥界面客户端和服务器端传输的数据。

8) WEB服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。

9) Fiddler使用前面获取的对称密钥解密报文。

10) 客户端验证数据无误以后HTTPS连接就建立完成,客户端开始向服务器发送使用对称密钥加密的业务数据。

11) Fiddler使用前面获取的对称密钥解密客户端发送的数据并重新加密转发给客户端。

6.Fiddler捕获Https协议会话

默认情况下,Fiddler不会捕获HTTPS请求,需要进行设置。

当浏览器访问HTTPS网页的时候,Fiddler能捕获到很多握手验证的请求,比如用浏览器访问:Https://www.baidu.com ,在Fiddler中就能抓到很多“Tunnel to”的请求,如下图所示:

1.在没有进一步配置之前用Fiddler抓包时候,分别用FireFox和Chrome浏览器打开百度网页:https://www.baidu.com 可以在会话面板看到百度信息,但是进行查看是Fiddler的监控面板出现黄色的告警“Https decryption is disabled click to configure”(翻译:https 解密被禁用 ,点击配置)。至于IE浏览器,微软已经官宣它已经要落幕退役,宏哥这里就不做过多的介绍了。当然了Firefox浏览器有些版本也会有特殊情况需要你进一步配置,这个宏哥在后边会做介绍的。如下图所示:

从上图中我们可以清楚地看到Host列中出现Tunnel to...字样”,总之以后如果会话列表中的Host列中出现Tunnel to...字样都说明是证书的问题, 这种就不能抓取到我们想要的会话。那么要抓取https协议的会话需要打开配置安装证书才可以,毕竟目前很多网站都是https协议的, 所以在抓包之前,我们还要配置一下证书 否则无法抓包。那么接下来跟随宏哥看看Fiddler如何配置证书。

6.1Fiddler证书配置

1.启动FIddler,然后在菜单栏点击Tools---->Options---->HTTPS 。如下图所示:

2.依次勾选“Capture HTTPS CONNECTs”(捕获HTTPS连接)和勾选“Decrypt HTTPS traffic”(解密HTTPS流量),然后会弹出一个对话框 直接点击YES即可。如下图所示:

敲黑板!!!

你是第一次安装的Fiddler那么正常情况下会弹出证书安装的相关提示。如果有的小伙伴或者童鞋们没有弹出提示,你也不要着急上火和担心,你可以点击Actions---> Trust Root Certificate(信任根证书)就会弹出一模一样的证书安装相关提示。如下图所示:

3.点击“Yes”后,接下来弹出的对话框全部傻瓜式地点击“是”即可。如下图所示:

4.弹出“Added Fiddler's root certificate to the Machine Root list”(将Fiddler的证书添加到机器根目录列表中) ,点击“确定”。如下图所示:

5.最后把下面的:“Ignore server certificate errors(unsafe)”忽略服务器证书错误(不安全)和“check for certificate revocation ”(证书撤销检查)这两个选项也勾选上。如下图所示:

到此证书也已经安装到Fiddler上了。

6.2查看安装到Fiddler的证书

6.2.1方法一

1.我们可以点击Actions中选择Open Windows Certificate Manager这一个选项, 打开打开Windows证书管理器去查看。如下图所示:

2.打开打开Windows证书管理器 之后点击菜单栏上的 操作--->查找证书然后输入Fiddler 就会查找出证书了(如果没有说明没有安装成功),如下图所示:

3.证书名为DO_NOT_TRUST_FiddlerRoot 大家可以对照着看看。如下图所示:

6.2.2方法二

1.WIN+R打开运行,输入certmgr.msc回车,点击“受信任的根证书颁发机构--->点击“证书”。查看,如下图所示:

6.3信任证书

证书安装了之后 还要设置一下信任才行。具体操作步骤如下:

1.直接选择Tools--->Options---->HTTPS---->Actions--->Trust Root Certificate 。如下图所示:

2.在接下来弹出的对话框中直接点击确定或yes就行了,如下图所示:

 好了到此为止,大功告成!现在如果不出意外的话就可以进行正常的抓取HTTPS包了。

敲黑板!!!

如果还是不行,那么最好重置一下证书 在Actions中选择Reset All Certificates(重置所有证书) 然后点击确定删除Fiddler所配置的证书,最后重新执行之前的步骤就可以了。

7.HTTPS 中间人攻击

HTTPS 从协议上解决了 HTTP 时代的中间人攻击问题,但是 HTTPS 在用户主动信任了伪造证书的时候也会发生中间人攻击(比如早期的 12306 需要手动信任证书),HTTPS 中间人攻击流程如下:

  1. 客户端用 HTTPS 连接服务器的 443 端口。
  2. 服务器下发自己的数字证书给客户端。
  3. 黑客劫持了服务器的真实证书,并伪造了一个假的证书给浏览器。
  4. 浏览器可以发现得到的网站证书是假的,但是浏览器选择信任。
  5. 浏览器生成随机对称密钥 A,用伪造的证书中的公钥加密发往服务器。
  6. 黑客同样可以劫持这个请求,得到浏览器的对称密钥 A,从而能够窃听或者篡改通信数据。
  7. 黑客利用服务器的真实公钥将客户端的对称密钥 A 加密发往服务器。
  8. 服务器利用私钥解密这个对称密钥 A 之后与黑客通信。
  9. 黑客利用对称密钥 A 解密服务器的数据,篡改之后利用对称密钥 A 加密发给客户端。
  10. 客户端收到的数据已经是不安全的了。

以上就是 HTTPS 中间人攻击的原理,这也就是 HTTPS 抓包为什么要信任证书的原因。所以,操作系统内置权威 CA 公钥来保证数字签名以及数字证书的安全性。实施 HTTPS 中间人攻击需要手动信任攻击者的假证书。

因为中间人与服务器的通信过程是合法的,正规网站通过建立的安全通道返回加密后的数据。中间人凭借与正规网站建立的对称加密算法对内容进行解密。

中间人通过与客户端建立的对称加密算法对正规内容返回的数据进行加密传输。客户端通过与中间人建立的对称加密算法对返回结果数据进行解密。

由于缺少对证书的验证,所以客户端虽然发起的是 HTTPS 请求,但客户端完全不知道自己的网络已被拦截,传输内容被中间人全部窃取。

8.小结

 今天宏哥主要简单的讲解和分享了https原理及网络抓包的实践,HTTPS对中间人真就束手就擒了?宏哥在这里持怀疑态度,如果有些用户自己安全意识薄弱,尽管现在网站都使用了https的协议,但是还是很容易中招的。这里的抓包工具Fiddler恰好就是充当中间人的角色,如果我们信任了中间人的证书,那么恭喜你,中招了。好了时间不早了今天就到这里,感谢大家耐心地阅读!!!

会遇到的问题:

证书导出失败,出现如下提示:Unable to configure Windows to Trust the Fiddler Root.... 如下图所示:

解决方案:

找到fiddler->工具栏tools->options,再选择HTTPS,点击CertEnroll engine,选择MakeCert即可点击OK保存,最后切记重启fiddler!!!