FiddlerCore如何解密HTTPS流量

时间:2013-08-07 09:10:30

标签: c# windows-applications fiddlercore

我为捕获https流量写了一个小程序。我想使用该软件捕获 DECODED 获取和发布数据 如你所知,Fiddler应用程序可以像魅力那样做,现在我正在寻找一种方法在我的程序中这样做。

例如,这是我的代码:

   void FiddlerApplication_AfterSessionComplete(Fiddler.Session oSession)
        {
            this.Invoke(new MethodInvoker(delegate
            {
                oSession.bBufferResponse = true;
                txtLog.Text += "full-url : \r\n" + oSession.fullUrl.ToString() + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "method : \r\n" + oSession.oRequest.headers.HTTPMethod + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "request headers : \r\n" + oSession.oRequest.headers + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "responce headers : \r\n" + oSession.oResponse.headers + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "get request body as string : \r\n" + oSession.GetRequestBodyAsString() + "\r\n-----------------------------------------------\r\n";
                txtLog.Text += "request body bytes : \r\n" + oSession.requestBodyBytes + "\r\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n";

                txtLog.SelectionStart = txtLog.Text.Length;
                txtLog.ScrollToCaret();
            }));
        }
对于https网页,

get request body as string中的txtLog如下所示:

get request body as string : 
A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Major Version: 3
Minor Version: 1
Random: 52 02 18 75 64 2D 8D 65 75 B9 C4 1B 58 76 92 3E 6B C5 BF 1D 3B D4 53 5D D2 FA CA D8 BF CE 02 5D
SessionID: empty
Ciphers: 
    [002F]  TLS_RSA_AES_128_SHA

这个握手部分是什么,我该如何解码呢? 如您所知,安装的fiddler应用程序中有两个文件(TrustCert.exe& makecert.exe) 什么是这些文件,我可以在我的小应用程序中使用它们来解码数据吗?怎么样?

提前致谢

1 个答案:

答案 0 :(得分:8)

FiddlerCore类库使用中间人方法解密HTTPS流量。

正如Fiddler book中所述:

  

HTTPS协议将加密(SSL或TLS)连接三明治   HTTP请求和底层TCP / IP网络连接之间   发送这些请求的时间。网络中介或   因此,观察者无法查看或修改HTTP   由于使用加密协议,流量。你可能会   然后惊讶地发现Fiddler可以查看和修改HTTPS   如果配置适当,流量。 Fiddler通过使用a来实现这一点   HTTPS中的“中间人”方法,这意味着在谈话时   对于客户端,它假装是服务器,并在与之交谈时   服务器,它假装是客户端。

     

HTTPS协议明确旨在通过使用数字证书来阻止此攻击   验证HTTPS服务器的身份(以及可选的身份验证)   客户)。当客户端从服务器收到证书时,它   通过确定验证证书本身是否值得信任   它是否被链接到根证书颁发机构   受客户端或操作系统信任。因为你是典型的   在您自己的计算机上运行Fiddler,您可以重新配置您的浏览器   或操作系统来信任Fiddler的根证书。你做完之后   因此,客户端应用程序在检测到时不会抱怨   Fiddler生成的证书正在保护流量。

如果您的目标是将此功能嵌入到您的应用程序中,您应该只在您的应用程序中使用FiddlerCore--这就是它存在的原因!

关于“握手”的问题 - 握手是客户端和服务器就HTTPS通信的参数达成一致的方式(例如,使用什么密码和密钥)。你没有“解码”握手本身--FiddlerCore为你处理这个。

您可能会感到困惑,因为HTTPS流量在HTTP CONNECT隧道内运行,并且该隧道在FiddlerCore中也可见。为确保您的HTTPS会话也被捕获,请务必在调用FiddlerCoreStartupFlags.DecryptSSL方法时传递Startup标志。另外,请确保makecert.exe与程序的可执行文件位于同一文件夹中。

另外,请记住,在会话之后设置bBufferResponse属性已经完成处理无效;你应该删除它。