HTTPS over Socks5 服务器实现

HTTPS over Socks5 server implementation

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

RFC1928所述,必须执行以下建立连接和转发数据的步骤:

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

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

是否应该遵循另一个 sequence/steps 以能够处理 SSL/TLS (HTTPS) 流量?

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