【问题标题】:Capturing HTTPS traffic in the clear?清楚地捕获 HTTPS 流量?
【发布时间】:2010-11-07 13:45:54
【问题描述】:

我有一个与远程 Web 服务通信的本地应用程序(不是我编写的,也无法更改)。它使用 HTTPS,我想看看流量中有什么。

有什么办法可以做到吗?我更喜欢 Windows 系统,但我很乐意在 Linux 上设置代理,如果这样可以让事情变得更简单。

我在考虑什么:

  1. 通过破解我的 hosts 文件(或设置备用 DNS)重定向网站。
  2. 在该站点上安装带有自签名(但受信任)证书的 HTTPS 服务器。
  3. 显然,如果您向 WireShark 提供私钥,它可以查看 HTTPS 中的内容。我从未尝试过。
  4. 不知何故,将此流量代理到真实服务器(即,这是一个成熟的中间人“攻击”)。

这听起来合理吗? WireShark 真的可以看到 HTTPS 流量中的内容吗?谁能指点我一个合适的代理(以及相同的配置)?

【问题讨论】:

    标签: ssl https man-in-the-middle


    【解决方案1】:

    Fiddler 做你想做的事吗?

    什么是提琴手?

    Fiddler 是一个 Web 调试代理,它 记录您之间的所有 HTTP(S) 流量 电脑和互联网。提琴手 允许您检查所有 HTTP(S) 流量、设置断点和“小提琴” 与传入或传出数据。 Fiddler 包含一个强大的 基于事件的脚本子系统,以及 可以使用任何 .NET 进行扩展 语言。

    Fiddler 是免费软件,可以调试 来自几乎任何地方的流量 应用程序,包括互联网 Explorer、Mozilla Firefox、Opera 和 数以千计。

    【讨论】:

    • 是的,它可以充当 HTTPS 请求的中间人代理 - 请注意,它提供未签名的证书,因此如果您的应用需要受信任的证书,您必须禁用此要求,或信任证书 - Fiddler 不建议这样做:fiddler2.com/Fiddler/help/httpsdecryption.asp
    • 我可以从 Internet Explorer 和 Chrome 中查看 HTTPS 流量;现在来看看它是否适用于有问题的应用程序......
    • ...除了有问题的应用程序仅以管理员权限运行,而且 Fiddler 似乎不想在我的管理员帐户下安装其 HTTPS 证书(我大部分时间都运行 LUA)。
    • 您绝对可以将 Fiddler 自签名根证书复制到机器范围的受信任根存储中。
    【解决方案2】:

    Wireshark 绝对可以将 TLS/SSL 加密流显示为纯文本。但是,您肯定需要服务器的私钥才能这样做。必须将私钥作为首选项下的 SSL 选项添加到 Wireshark。请注意,这仅在您可以从一开始就遵循 SSL 流的情况下才有效。如果重复使用 SSL 连接,它将不起作用。

    对于 Internet Explorer,可以通过使用 Internet 选项对话框清除 SSL 状态来避免这种情况(SSL 会话重用)。其他环境可能需要重新启动浏览器甚至重新启动系统(以避免 SSL 会话重用)。

    另一个关键约束是必须使用 RSA 密码。 Wireshark 无法解码使用 DFH (Diffie-Hellman) 的 TLS/SSL 流。

    假设你能满足以上的限制条件,“Follow SSL Stream”右键命令效果不错。

    【讨论】:

    • 设置这个的具体步骤(或帖子的链接)会很棒。
    【解决方案3】:

    您需要为您的本地应用程序设置一个代理,如果它不支持代理设置,请放置一个透明代理并在外出之前将所有 https 流量路由到其中。像这样的东西可以是中间的“人”:http://crypto.stanford.edu/ssl-mitm

    另外,这里有关于如何使用 wireshark 存档的简要说明:http://predev.wikidot.com/decrypt-ssl-traffic

    【讨论】:

      【解决方案4】:

      您还应该考虑Charles。来自此答案时的产品描述:

      Charles 是一个 HTTP 代理/HTTP 监视器/反向代理,它使开发人员能够查看他们的机器和 Internet 之间的所有 HTTP 和 SSL/HTTPS 流量。这包括请求、响应和 HTTP 标头(其中包含 cookie 和缓存信息)。

      【讨论】:

        【解决方案5】:
        1. 对于使用 https 代理进行监控,这取决于握手的类型。如果您的本地应用程序没有通过您无法伪造的 CA 签名检查服务器的证书,并且服务器没有检查您的本地应用程序的证书(或者如果您在 https 代理上设置了一个),那么您可以设置一个 https 代理来监控 https 流量。不然我觉得用https代理监控流量是不可能的。

        2. 您可以尝试的另一种方法是在客户端程序的例程中添加检测探针,以便从其 https 库发送和接收消息。它需要一些逆向工程工作,但应该适用于所有情况。

        【讨论】:

          【解决方案6】:

          我会推荐 WireShark,它是跟踪不同流量的最佳工具。虽然,我不确定打开 SSL 后你能看到什么。也许,如果您提供证书?

          【讨论】:

          • 证书是不够的。否则我们都会解密所有 SSL 流量。您需要一个私钥来解密流量...正如 OP 所示...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-30
          相关资源
          最近更新 更多