proxy - HTTPS over Socks5 服务器实现

标签 proxy socks

我正在尝试实现一个可以中继 HTTP 和 HTTPS 流量的 Socks5 服务器。

作为RFC1928提到,必须采取以下步骤来建立连接并转发数据:

  1. 客户端向代理发送问候消息。
  2. 客户端和代理身份验证(假设成功)。
  3. 客户端向代理发送请求以连接到目标。
  4. 代理连接到目标并向客户端发回响应,以指示隧道已成功打开。
  5. 代理从客户端读取数据并将其转发到目的地。
  6. 代理从目标读取数据并将其转发到客户端。

到目前为止,代理可以正常工作。它能够使用其基本数据转发机制来中继 HTTP 流量。但是,由于 SSL/TLS 加密,客户端向 HTTPS 网站发出的任何请求都将被中止。

是否需要遵循其他顺序/步骤才能处理 SSL/TLS (HTTPS) 流量?

最佳答案

您所描述的顺序是正确的,即使对于 HTTPS 也是如此。当客户端想要通过代理向HTTPS服务器发送请求时,它会请求代理连接到目标服务器的HTTPS端口,然后一旦建立隧道,客户端就会与目标服务器协商TLS握手,然后发送(加密的)HTTP 请求并接收(加密的)HTTP 响应。隧道只是原始字节的传递,代理在客户端和服务器之间没有任何加密的概念。它不关心字节代表什么,它的工作只是按原样传递它们。

关于proxy - HTTPS over Socks5 服务器实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70546537/

相关文章:

c# - 通过代理连接到 IRC (.NET)

Apache/Nginx : proxy POST requests to remote server, 在本地处理 OPTIONS 请求

networking - Proxifier 是如何工作的?

macos - OSX SSH 通过 SOCKS5 代理服务器

ios - 我可以在 iOS 应用程序中设置设备级代理吗?如何?

Perl HTTP Tiny + Socket Socks Wrapper 超时不起作用

proxy - 使用原始 URL,而不是代理,通过浏览器同步

proxy - 使用Powershell和代理访问Web

apache - 如何通过 Apache 代理服务第二个子域

c++ - 我的 socks v5 握手有什么问题?