用Netty实现HTTPs代理服务器



我现在正在用Netty实现代理服务器。我的代理可以将http数据从客户端发送到服务器,反之亦然。但当我尝试访问https网站时,使用curl从客户端到服务器的数据显示1401E10B:SSL例程:CONNECT_CR_FINISHED:错误的版本号错误。错误消息图

到目前为止,我所做的事情如下。

  1. 为http创建管道

客户端到代理管道

HttpServerCodec->HttpObjectAggregator->ClientToProxyHandler

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

删除服务器管道的代理

HttpClientCodec->HttpObjectAggregator->ProxyToServerHandler

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

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

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

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

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

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

最新更新