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