HTTPS over Socks5 服务器实现
HTTPS over Socks5 server implementation
我正在尝试实现一个可以中继 HTTP 和 HTTPS 流量的 Socks5 服务器。
如RFC1928所述,必须执行以下建立连接和转发数据的步骤:
- 客户端向代理发送问候消息。
- 客户端和代理身份验证(假设成功)。
- 客户端向代理发送连接到目标的请求。
- 代理连接到目的地,并向客户端发回响应,指示成功打开隧道。
- 代理从客户端读取数据并转发到目的地。
- 代理从目的地读取数据并将其转发给客户端。
到目前为止,代理可以正常工作。它能够使用其基本数据转发机制中继 HTTP 流量。但是,由于 SSL/TLS 加密,客户端对 HTTPS 网站的任何请求都将被中止。
是否应该遵循另一个 sequence/steps 以能够处理 SSL/TLS (HTTPS) 流量?
您描述的顺序是正确的,即使对于 HTTPS。当客户端想要通过代理向HTTPS服务器发送请求时,它会请求代理连接到目标服务器的HTTPS端口,然后一旦隧道建立,客户端就会与目标服务器协商TLS握手,然后发送一个(加密的)HTTP 请求并接收一个(加密的)HTTP 响应。隧道只是原始字节的传递,代理在客户端和服务器之间没有任何加密的概念。它不关心字节代表什么,它的工作只是按原样传递它们。
我正在尝试实现一个可以中继 HTTP 和 HTTPS 流量的 Socks5 服务器。
如RFC1928所述,必须执行以下建立连接和转发数据的步骤:
- 客户端向代理发送问候消息。
- 客户端和代理身份验证(假设成功)。
- 客户端向代理发送连接到目标的请求。
- 代理连接到目的地,并向客户端发回响应,指示成功打开隧道。
- 代理从客户端读取数据并转发到目的地。
- 代理从目的地读取数据并将其转发给客户端。
到目前为止,代理可以正常工作。它能够使用其基本数据转发机制中继 HTTP 流量。但是,由于 SSL/TLS 加密,客户端对 HTTPS 网站的任何请求都将被中止。
是否应该遵循另一个 sequence/steps 以能够处理 SSL/TLS (HTTPS) 流量?
您描述的顺序是正确的,即使对于 HTTPS。当客户端想要通过代理向HTTPS服务器发送请求时,它会请求代理连接到目标服务器的HTTPS端口,然后一旦隧道建立,客户端就会与目标服务器协商TLS握手,然后发送一个(加密的)HTTP 请求并接收一个(加密的)HTTP 响应。隧道只是原始字节的传递,代理在客户端和服务器之间没有任何加密的概念。它不关心字节代表什么,它的工作只是按原样传递它们。