【问题标题】:Running Fiddler as a Reverse Proxy for HTTPS server将 Fiddler 作为 HTTPS 服务器的反向代理运行
【发布时间】:2014-11-08 06:54:56
【问题描述】:

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

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

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

我想达到的情况如下:

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

我想从我的计算机联系 Fiddler,它将流量重定向到 Web 服务器。然而,Web 服务器使用 HTTPS。

在服务器上,我设置了 Fiddler 来处理 HTTPS 会话并对其进行解密。我被要求在服务器上安装 Fiddler 的假 CA 证书,我做到了!我还插入了 Fiddler wiki 页面建议的脚本来重定向 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 bad gateway。

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

问题

我做错了什么?

有没有可能……?

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

【问题讨论】:

    标签: ssl https proxy fiddler


    【解决方案1】:

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

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

    1. 将现有的 HTTPS 服务器移至新端口(例如 444)
    2. 内部工具 > Fiddler 选项 > 连接,勾选 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";
      }
      

    为什么要这样做?

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

    【讨论】:

    • 顺便说一句,如何使用现有证书(不是由 FIDDLER_DO_NOT_TRUST 颁发)启动 HTTPS 侦听器?我尝试通过netsh http add sslcert 绑定证书,但对此没有影响。
    • 感谢您提供信息和改进答案。关于问题,你读过这个吗? stackoverflow.com/questions/28850330/…有可能吗?
    • 为我工作,唯一的小调整 - 主机小写。
    • @EricLaw 我已经用oSession.host = "mywebapi.dev:444"; 添加了onbeforeRequest,但是当我输入!listen 443 mywebapi.dev 时,我得到Port 443 is in use by system:4. Would you like Fiddler to use a random portA secure listener is started on #443 带有证书 SubjectCN=mywebapi.dev。如果我单击是,它不起作用。我正在使用提琴手 4.6.2.3。就我而言,浏览器和服务器在同一台机器上!
    【解决方案2】:

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

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

    根据 EricLaw 的建议,我将侦听端口从 8888 更改为 8889,并运行命令“!listen 8889 [host_machine_name]”,然后我就可以在 HTTPS 端口 8889 上浏览我的应用程序了。

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

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2013-04-02
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多