运行Fiddler作为HTTPS服务器的反向代理

时间:2014-09-14 18:00:43

标签: ssl https proxy fiddler

我遇到以下情况:2台主机,一台是客户端,另一台是HTTPS服务器。

Client (:<brwsr-port>) <=============> Web server (:443)

我在服务器上安装了Fiddler,这样我就可以在我的服务器端口8888上运行Fiddler。

我想达到的情况如下:

|Client (:<brwsr-port>)| <===> |Fiddler (:8888) <===> Web server (:443)|
|-Me-------------------|       |-Server--------------------------------|

我想通过电脑联系Fiddler,它会将流量重定向到网络服务器。然而,Web服务器使用HTTPS。

在服务器上,我设置了Fiddler来处理HTTPS会话并解密它们。我被要求在服务器上安装Fiddler的假CA证书,我做到了!我还插入了Fiddler维基页面建议的脚本来重定向HTTPS流量

// HTTPS redirect ----------------------- 
FiddlerObject.log("Connect received...");
if (oSession.HTTPMethodIs("CONNECT") && (oSession.PathAndQuery == "<server-addr>:8888")) {
    oSession.PathAndQuery = "<server-addr>:443";
}
// --------------------------------------

然而,当我尝试https://myserver:8888/index.html时,我失败了!

失败详情

在客户端上使用Fiddler时,我可以看到CONNECT请求启动但会话失败,因为响应是HTTP错误502.看起来没有人在端口8888上侦听。事实上,如果我在服务器上停止Fiddler我得到同样的情况:502坏网关。

请注意,当我尝试https://myserver/index.htmlhttps://myserver:443/index.html时,一切正常!

问题

我做错了什么?

是否可能......?

我认为既然TLS / SSL可能在端口443上运行,我应该让Fiddler在那里监听并将我的Web服务器移动到另一个端口,例如444(我应该在IIS上设置一个https绑定在端口444上)。这是对的吗?

2 个答案:

答案 0 :(得分:14)

如果Fiddler没有配置为客户端代理,而是在服务器上作为反向代理运行,那么事情会变得复杂一些。

将Fiddler作为HTTPS的反向代理运行

  1. 将现有HTTPS服务器移至新端口(例如444)
  2. 内部工具&gt;提琴手选项&gt;连接,勾选Allow Remote Clients to Connect。重启Fiddler。
  3. 在Fiddler的QuickExec框中,输入!listen 443 ServerName,其中ServerName是服务器的主机名;例如,对于https://Fuzzle/,您可以使用fuzzle作为服务器名称。
  4. 在OnBeforeRequest方法中,添加:

    if ((oSession.HostnameIs("fuzzle")) &&
        (oSession.oRequest.pipeClient.LocalPort == 443) ) 
    {
       oSession.host = "fuzzle:444";
    }
    
  5. 为什么你需要这样做?

    !listen命令指示Fiddler创建一个新端点,该端点将在连接时与客户端执行HTTPS握手;默认代理端点不会这样做,因为当代理收到HTTPS流量的连接时,它会收到HTTP CONNECT请求而不是握手。

答案 1 :(得分:2)

我刚遇到类似的情况,我在VS2013(IISExpress)上运行HTTPS应用程序(端口44300)上的Web应用程序,我想从移动设备浏览应用程序。

我将Fiddler配置为“充当反向代理”并“允许远程客户端连接”,但它只能在端口80(HTTP)上运行。

根据EricLaw的建议,我将监听端口从8888更改为8889并运行命令“!listen 8889 [host_machine_name]”和bingo我能够在端口8889上通过HTTPS浏览我的应用程序。

注意:我之前已将转发端口号输入注册表(as described here),因此Fiddler已经知道要将请求转发到哪个端口。