行为
我正在使用Netty 4.1.15.Final。我想在服务器端启用setHandshakeTimeout()。我像这样调用方法sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
,将HandshakeTimeout的值设置为非常小的值,以便客户端和服务器无法完成握手,因为握手超时了。
但是当我在服务器上使用此方法时,它无法正常工作。服务器和客户端之间仍然可以建立连接。但是当我在客户端中执行相同的操作时,SSL连接无法建立,这正是我希望看到的。
复现步骤
- 在服务器中调用
sslHandler.setHandshakeTimeoutMillis(1);
或sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
- 进行连接,SSL连接可以成功建立
- 在客户端中再次执行1和2,SSL连接无法建立
我的代码如下:
@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());
}
我使用官方SecureChat作为示例。
问题
我的操作方法是否有误?如果是,如何正确设置服务器的SSL握手超时时间?如果不是,为什么SSL连接可以建立而握手超时无效?