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

And*_*dry 10 ssl https proxy fiddler

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

Client (:<brwsr-port>) <=============> Web server (:443)
Run Code Online (Sandbox Code Playgroud)

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

我想达到的情况如下:

|Client (:<brwsr-port>)| <===> |Fiddler (:8888) <===> Web server (:443)|
|-Me-------------------|       |-Server--------------------------------|
Run Code Online (Sandbox Code Playgroud)

从我的电脑我想联系Fiddler,它将流量重定向到Web服务器.然而,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";
}
// --------------------------------------
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试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端口).这是对的吗?

Eri*_*Law 16

如果未将Fiddler配置为客户端的代理,而是在服务器上作为反向代理运行,则事情会变得复杂一些.

运行Fiddler作为HTTPS的反向代理

  1. 将现有HTTPS服务器移动到新端口(例如444)
  2. 在工具>提琴手选项>连接,勾选Allow Remote Clients to Connect.重启Fiddler.
  3. 在Fiddler的QuickExec框中,键入!listen 443 ServerNameServerName所在的服务器主机名; 例如,因为https://Fuzzle/您将使用fuzzle服务器名称.
  4. 在OnBeforeRequest方法中,添加:

    if ((oSession.HostnameIs("fuzzle")) &&
        (oSession.oRequest.pipeClient.LocalPort == 443) ) 
    {
       oSession.host = "fuzzle:444";
    }
    
    Run Code Online (Sandbox Code Playgroud)

你为什么需要这样做?

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

  • 为我工作,唯一的小调整 - 主机小写. (2认同)