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

问题描述 投票:0回答:2

行为

我使用的是 Netty 4.1.15.Final。我想在服务器端启用 setHandshakeTimeout() 。我这样调用该方法

setHandshakeTimeout()
sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
HandshakeTimeout的值被设置为一个很小的值,这样客户端和服务器就无法完成握手,因为握手超时了。

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

重现步骤

  1. 调用服务器中的
    sslHandler.setHandshakeTimeoutMillis(1);
    sslHandler.setHandshakeTimeout(1,TimeUnit.MILLISECONDS);
  2. do connect 即可成功建立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连接可以建立,握手超时无效?

ssl netty
2个回答
0
投票

服务器端 SSL 握手超时在 Netty 版本 4.0.53.Final / 4.1.17.Final 之前不可用。详情请参阅https://netty.io/news/2017/11/08/4-0-53-Final-4-1-17-Final.html


0
投票

这意味着客户端无法在 10000 毫秒(10 秒)内与代理建立安全连接。造成这种情况的可能原因有以下几个:

经纪人可能不可用。 客户端可能没有配置正确的证书或密钥库。 可能有防火墙阻止连接。 要解决此问题,您可以尝试以下操作:

检查经纪人的可用性。您可以通过 ping 代理的主机名或 IP 地址来完成此操作。 验证客户端是否配置了正确的证书和密钥库。您可以通过检查 Pulsar 客户端的配置文件来完成此操作。 检查是否有任何可能阻止连接的防火墙。您可以通过检查客户端所在网络的防火墙规则来执行此操作。 如果您在连接代理时仍然遇到问题,可以联系 Pulsar 支持团队寻求帮助。

以下是一些需要记住的额外事项:

Pulsar 客户端和 Broker 必须使用相同的安全协议。

证书和密钥库必须有效且是最新的。 防火墙规则必须允许客户端和代理之间的流量。 我希望这有帮助!如果您还有其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.