【问题标题】:Implementing HTTPs proxy server with Netty使用 Netty 实现 HTTPS 代理服务器
【发布时间】:2021-09-28 12:05:21
【问题描述】:

我现在正在使用 Netty 实现代理服务器。 我的代理可以将 http 数据从客户端发送到服务器,反之亦然。 但是当我尝试访问 https 站点时,使用 curl 从客户端到服务器的数据显示 1401E10B:SSLroutines:CONNECT_CR_FINISHED:wrong version number 错误。 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 命令时,它可以工作。

【问题讨论】:

    标签: http https proxy netty


    【解决方案1】:

    您似乎没有SslHandler 在管道中,您需要为https 流量添加它。

    【讨论】:

    • 感谢您的回答。但我认为 sslHandler 不是必需的,因为我检查了类似的示例,例如 LittleProxylink。当他们只进行 https 请求而没有任何选项(如 mitm 代理、自签名证书)并且它可以工作时,不使用 sslhandler。
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多