Netty设置SSL握手超时不起作用

时间:2017-09-20 03:24:13

标签: ssl netty

行为

我使用的是Netty 4.1.15.Final。我想在服务器端启用setHandshakeTimeout()。我像这样调用方法setHandshakeTimeout() sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS); HandshakeTimeout的值被设置为一个非常小的值,这样客户端和服务器就无法完成握手,因为握手是超时的。

但是当我在服务器中使用它时它无法工作。仍然可以在服务器和客户端之间建立连接。但是,当我在客户端执行相同操作时,无法建立SSL连接,这是我期望看到的。

重现步骤

  1. 致电服务器中的sslHandler.setHandshakeTimeoutMillis(1);sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
  2. 可以成功建立连接和SSL连接
  3. 在客户端再次执行1和2,并且无法建立SSL连接
  4. 我的代码就像这样

     @Override
    public void initChannel(SocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
    
        // I want to set the SSL handshake timeout
        SslHandler sslHandler = sslCtx.newHandler(ch.alloc());
        sslHandler.setHandshakeTimeoutMillis(1);
        sslHandler.setHandshakeTimeout(1,TimeUnit.NANOSECONDS);
    
        pipeline.addLast(sslHandler);
    
        // On top of the SSL handler, add the text line codec.
        pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
        pipeline.addLast(new StringDecoder());
        pipeline.addLast(new StringEncoder());
    
        // and then business logic.
        pipeline.addLast(new SecureChatServerHandler());
    }
    

    我使用official SecureChat作为示例

    问题

    我是以错误的方式做的吗?如果是,如何以正确的方式设置服务器的SSL握手超时?如果没有,为什么可以建立SSL连接并且握手超时无效?

1 个答案:

答案 0 :(得分:0)

直到版本4.0.53.Final / 4.1.17.Final才在Netty中提供服务器端SSL握手超时。有关详细信息,请参见https://netty.io/news/2017/11/08/4-0-53-Final-4-1-17-Final.html