Netty设置SSL握手超时时间无效。

3

行为

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

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

复现步骤

  1. 在服务器中调用sslHandler.setHandshakeTimeoutMillis(1);sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
  2. 进行连接,SSL连接可以成功建立
  3. 在客户端中再次执行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连接可以建立而握手超时无效?


你确定1纳秒足够快来完成所有费用计算,并准备和验证对方吗?即使是从内存中进行简单的读取操作也需要120纳秒。 - undefined
我尝试了不同的值,如100、200、500等毫秒或秒,仍然无法建立连接。我很好奇为什么握手超时无法起作用。 - undefined
2个回答

0

0
这意味着客户端在10000毫秒(10秒)内无法建立与代理商的安全连接。可能有几个原因导致这种情况发生:
- 代理商可能不可用。 - 客户端可能没有正确配置证书或密钥库。 - 可能有防火墙阻止了连接。
为了解决这个问题,您可以尝试以下操作:
- 检查代理商的可用性。您可以通过ping代理商的主机名或IP地址来进行检查。 - 验证客户端是否正确配置了证书和密钥库。您可以通过检查Pulsar客户端的配置文件来进行验证。 - 检查可能阻止连接的防火墙。您可以通过检查客户端所在网络的防火墙规则来进行检查。
如果您仍然无法连接到代理商,可以联系Pulsar支持团队寻求帮助。
以下是一些需要注意的额外事项:
- Pulsar客户端和代理商必须使用相同的安全协议。 - 证书和密钥库必须有效且更新。 - 防火墙规则必须允许客户端和代理商之间的流量通过。
希望这对您有所帮助!如果您有任何其他问题,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接