我使用的是Netty 4.1.15.Final。我想在服务器端启用setHandshakeTimeout()。我像这样调用方法setHandshakeTimeout()
sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
HandshakeTimeout的值被设置为一个非常小的值,这样客户端和服务器就无法完成握手,因为握手是超时的。
但是当我在服务器中使用它时它无法工作。仍然可以在服务器和客户端之间建立连接。但是,当我在客户端执行相同操作时,无法建立SSL连接,这是我期望看到的。
sslHandler.setHandshakeTimeoutMillis(1);
或sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
我的代码就像这样
@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连接并且握手超时无效?
答案 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。