使用 Netty 实现 HTTPs 代理服务器

时间:2021-07-21 04:28:11

标签: http https proxy netty

我现在正在使用 Netty 实现代理服务器。 我的代理可以将 http 数据从客户端发送到服务器,反之亦然。 但是当我尝试访问 https 站点时,使用 curl 从客户端到服务器的数据显示 1401E10B:SSLroutines:CONNECT_CR_FINISHED:wrong version number error。 Error message figure

到目前为止我所做的是以下。

  1. 为 http 建立管道

客户端到代理管道

<块引用>

HttpServerCodec -> HttpObjectAggregator -> ClientToProxyHandler

在 ClientToProxyHandler 中,我的代理服务器使 TCP 连接到远程服务器

用于移除服务器管道的代理

<块引用>

HttpClientCodec -> HttpObjectAggregator -> ProxyToServerHandler

在 ProxyToServerHandler 中,只需将来自远程服务器的响应发送到 inboundChannel。

通过这些管道,http 请求可以很好地工作。

  1. 为了从客户端向远程服务器发送加密消息,当代理收到 https 初始请求时,代理与远程服务器建立 tcp 连接并向客户端发送已建立的 200 连接。另外,在那段时间,我从管道中删除了 HttpCodecs 和 HttpObjectAggregator,因为我认为加密数据不需要 HttpCodecs 和 HttpObjectAggregator。

使用这些结构,结果显示 TLS 握手失败,如上图。

另外,我认为这不是 curl 中的版本问题,因为当我运行 LittleProxy 并输入相同的 curl 命令时,它可以工作。

1 个答案:

答案 0 :(得分:0)

看起来您的管道中没有 SslHandler,您需要为 https 流量添加它。

相关问题