如何将客户端管道更新为ssl/非ssl模式,类似于optionalsslhandler在服务器端所做的操作?

swvgeqrz  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(273)

我试图让两个对等点相互通信,并能够切换到ssl/非ssl。与此类似。我使用netty 4.1.65.final。
客户端设置:

@Override
protected void initChannel(Channel ch) throws Exception {
    SslHandler sslHandler = sslContext.newHandler(ch.alloc());
    sslHandler.setHandshakeTimeoutMillis(10 * 1000L);
    sslHandler.engine().beginHandshake();
    // Adding handshake listener before adding handler to pipeline
    sslHandler.handshakeFuture()
              .addListener((GenericFutureListener<Future<Channel>>) 
                  future -> {
                        // If handshake was successful keep sslHandler in pipeline
                        if (!future.isSuccess()) {
                            // No ssl on server side, remove ssl from client side.
                            ch.pipeline().remove(sslHandler);
                        } 
                    });

    ch.pipeline().addLast(sslHandler);
   }

它与服务器端的sslhandler或optinalsslhandler一起工作(使用ssl),但当服务器端没有ssl时,由于错误,无法从客户端管道中删除ssl处理程序

Pending write on removal of SslHandler
    at io.netty.handler.ssl.SslHandler.handlerRemoved0(SslHandler.java:677)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题