【问题标题】:How to relay a SSL HttpRequest through a server with TCPListener?如何使用 TCPListener 通过服务器中继 SSL HttpRequest?
【发布时间】:2012-03-01 20:35:50
【问题描述】:

抱歉标题不佳,但基本上我想要实现的是有一个应用程序,它将使用 TCPListener 等待传入连接,然后将这些连接转发到它们的预期目的地。转发常规 Http 请求很容易,但我需要采取哪些步骤才能“代理”HTTPS 连接?

【问题讨论】:

    标签: c# ssl proxy tcplistener


    【解决方案1】:

    如果不是源或目标,您就无法读取 HTTPS 通信的内容。中间的任何人都无法窃听。因此,除非您事先知道目的地(例如,如果有人设法将目标 IP 带外发送给您),否则您将陷入困境。

    NITPICK 编辑:这并不完全正确。您可以假装是目的地并干扰握手过程。您能够看到请求的内容,但用户会看到不正确的证书警告。

    【讨论】:

    • 在任何合理的现实世界场景中都无法获得服务器端证书...
    • 是的(我也尝试将其写在我的答案中......),FoxyGT 也没有指定他是否需要通用解决方案或想为他的私人服务器做这件事 - 让海报受益怀疑而不是假设创建通用中间人代理的纯粹邪恶意图。
    【解决方案2】:

    除非您对客户端有一定的控制权,否则我看不到“代理”https 连接的方法。

    • 如果可以更改客户端的代理设置,您可以伪装成 SOCKS 代理。
    • 如果可以在客户端的 hosts 文件中添加一个新条目(就像您是目标一样),您可以绕过通信。

    但是无法读取会话的内容。

    【讨论】:

      【解决方案3】:

      理论上这实际上很简单——你只需要知道完整的服务器证书和潜在的客户端证书(如果使用的话),而不是正确地实现双方的握手。

      实际上 - 除非您拥有它,否则您无法获得服务器的 SSL 证书,客户端证书也是如此。

      我建议阅读 Fiddler 如何进行 HTTPS 解密的说明:http://www.fiddler2.com/Fiddler/help/httpsdecryption.asp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-19
        • 2012-10-03
        • 2018-11-19
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多