我现在正在用Netty实现代理服务器。我的代理可以将http数据从客户端发送到服务器,反之亦然。但当我尝试访问https网站时,使用curl从客户端到服务器的数据显示1401E10B:SSL例程:CONNECT_CR_FINISHED:错误的版本号错误。错误消息图
到目前为止,我所做的事情如下。
- 为http创建管道
客户端到代理管道
HttpServerCodec->HttpObjectAggregator->ClientToProxyHandler
在ClientToProxyHandler中,我的代理服务器使TCP连接到远程服务器
删除服务器管道的代理
HttpClientCodec->HttpObjectAggregator->ProxyToServerHandler
在ProxyToServerHandler中,只需将响应从远程服务器发送到inboundChannel。
有了这些管道,http请求可以很好地工作。
- 要将加密消息从客户端发送到远程服务器,当代理收到https初始请求时,代理将tcp连接到远程服务器并将建立的200连接发送到客户端。此外,在那段时间里,我从管道中删除了HttpCodecs和HttpObjectAggregator,因为我认为加密的数据不需要HttpCodecs或HttpObjectAgulator
使用这些结构,结果显示TLS握手失败,如上图所示。
另外,我认为这不是curl的版本问题,因为当我运行LittleProxy并输入相同的curl命令时,它就可以工作了。
看起来管道中没有SslHandler
,您需要为https
流量添加它。