牛骨文教育服务平台(让学习变的简单)
博文笔记

利用Fiddler和Wireshark解密SSL加密流量

创建时间:2015-10-02 投稿人: 浏览次数:132

Fiddler是一个著名的调试代理工具,它不仅能解析HTTP,而且还能解析加密的HTTPS流量。Wireshark则是一个非常强大的网络包监控以及协议分析工具。 在本文中,只考虑使用SSL来加密HTTP,所以并不严格区分SSL和HTTPS,虽然从广义上来讲,将二者混为一谈是非常不合理的 。

看到这里,大多数人都会很困惑:Fiddler不就能解密SSL流量吗?为什么还需要Wireshark呢?

是的,在大多数情况下,用Fiddler来解密SSL已经足够了,但在实际使用过程中,我们发现Fiddler在解决HTTP长连接时无能为力。对于特定的应用,比方说Office365的Microsoft MAPI over HTTP,它总是在Outlook和Office365 Exchange server之间维护一个HTTP长连接,并且利用HTTP chunk的特性,在有更新时返回一个chunk来达到实时将server端的变化告知给Outlook的目的。但是Fiddler不能很好地handle这种情况,它总是期望在HTTP response全部返回之后再显示出来。所以,在上述应用中,Fiddler不仅不能实时显示HTTP通信中的内容,而且,即使一个长连接断开之后,它显示的HTTP response也是无效的内容。

所以,我们就想到了Wireshark,它总是能实时监控网络流量。可是我们要监控的HTTP流量是经过SSL加密的,所以它必须要加密SSL流量的private key,才能解密这个SSL流量。因此,直接拦截网络流量是行不通的,因为server端的private key我们无法拿到。

于是,这两种情况综合一下,就促成了我们的解决方案:将Fiddler作为SSL代理以提供private key,然后用Wireshark实时监控以解密流量。

SSL介绍及SSL代理原理

SSL(Secure Socket Layer)是Netscape公司设计用来加密Internet通信流量的,最新版本更名为TLS(Transport Layer Security)。它采用X509证书加密来保证通信的保密性和可靠性。加密采用的证书通常由第三方证书颁发机构颁发,而这些机构是被信任的,也就是说,它们不会利用这些颁发的证书来进行窃听等行为。基于此前提,SSL协议本身能够保证:如果发生了窃听,那么用来加密的证书必定是不受信任的(除非用户将这些证书添加到其受信任证书列表中)。

SSL代理——换种说法,其实就是 Man-in-the-Middle 攻击。SSL代理,即是用自己的证书替代原来server端的证书(SSL虽然支持通信两方都提供证书,但目前绝大多数支持HTTPS的服务,都只是一方认证,即server提供证书,不要求client也提供受信任的证书,所以SSL代理只需要替代server端的证书即可),从而解密流量。但这样一来client端就会发现server端证书不是受信任的,但因为这只是我们自己的测试,所以我们需要信任代理生成的证书。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。