我使用的是 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());
}
我使用官方 SecureChat 作为示例
我的做法是错误的吗?如果是,如何正确设置服务器的SSL握手超时?如果不是,为什么SSL连接可以建立,握手超时无效?
服务器端 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。
这意味着客户端无法在 10000 毫秒(10 秒)内与代理建立安全连接。造成这种情况的可能原因有以下几个:
经纪人可能不可用。 客户端可能没有配置正确的证书或密钥库。 可能有防火墙阻止连接。 要解决此问题,您可以尝试以下操作:
检查经纪人的可用性。您可以通过 ping 代理的主机名或 IP 地址来完成此操作。 验证客户端是否配置了正确的证书和密钥库。您可以通过检查 Pulsar 客户端的配置文件来完成此操作。 检查是否有任何可能阻止连接的防火墙。您可以通过检查客户端所在网络的防火墙规则来执行此操作。 如果您在连接代理时仍然遇到问题,可以联系 Pulsar 支持团队寻求帮助。
以下是一些需要记住的额外事项:
Pulsar 客户端和 Broker 必须使用相同的安全协议。
证书和密钥库必须有效且是最新的。 防火墙规则必须允许客户端和代理之间的流量。 我希望这有帮助!如果您还有其他问题,请告诉我。