【问题标题】:Handle HTTPS Request in Proxy Server by C# ( CONNECT Tunnel )通过 C# 处理代理服务器中的 HTTPS 请求(连接隧道)
【发布时间】:2014-06-05 08:16:59
【问题描述】:

我正在尝试用 C# 编写家庭代理服务器,我几乎成功了,但我在处理 HTTPS 请求 (CONNECT) 时遇到问题。

我真的不知道如何处理这种类型的请求。

在我的研究中,我意识到对于这个请求,我们必须将客户端直接连接到目标主机。

这些请求的步骤(我意识到):

  • 接收来自客户端的第一个请求 (CONNECT https://www.example.ltd:443 HTTP/1.1) 并将其发送到目标主机
  • 发送HTTP/1.1 200 Connection Established\r\n\r\n给客户
  • 监听两个套接字(客户端和目标主机)并相互发送接收信息
  • 监听直到其中一个套接字断开

这是正确的吗?如果可以,c#如何处理?

【问题讨论】:

    标签: c# https proxy connect


    【解决方案1】:

    我的理解是

    CONNECT www.example.com:443 HTTP/1.1
    

    浏览器要求您在端口 443 上建立与 example.com 的连接。一旦成功实现,您应该然后发送

    HTTP/1.1 200 Connection established\r\n\r\n
    

    字符串返回给浏​​览器。您不会像我认为的那样将 CONNECT 字符串发送到服务器。此外,这个初始连接不应该被加密。

    从此时起,浏览器和终端服务器将通过纯文本连接交换数据,您必须将其转发到正确的目的地。为此,套接字必须保持打开状态。但是,没有指定通信的顺序,所以不要依赖浏览器发送数据,然后是服务器的响应。两者都可以在任何时候发送数据。他们将首先建立自己的安全连接,然后开始执行通常的 http 请求。

    希望这会有所帮助。

    参考资料:

    https://stackoverflow.com/a/24195792/1224132

    https://datatracker.ietf.org/doc/html/draft-luotonen-ssl-tunneling-03

    http://www.ietf.org/rfc/rfc2817.txt

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多