HTTPS over Socks5 服务器实现

Posted

技术标签:

【中文标题】HTTPS over Socks5 服务器实现【英文标题】:HTTPS over Socks5 server implementation 【发布时间】:2022-01-01 01:15:48 【问题描述】:

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

正如RFC1928 提到的,必须采取以下步骤来建立连接和转发数据:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我也是这么想的。 Firefox 显示 SSL 错误。事实证明,我的代码中有一个问题,我准确地读取了来自客户端的 1 个请求和 1 个响应。这就是导致 TLS 握手失败并显示错误的原因。感谢您的回复。

以上是关于HTTPS over Socks5 服务器实现的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux下配置socks5代理

PHP通过ssh或socks5读取远程服务器的mysql数据库

socks5搭理搭建

自己动手开发Socks5代理服务器

如何正确认识socks5代理ip

http代理和SOCKS5代理的区别是啥?