【问题标题】:How to handle SSL handshake failure in Netty如何处理 Netty 中的 SSL 握手失败
【发布时间】:2015-04-30 12:18:34
【问题描述】:

我们正在 Netty 之上实施 SSL。但目前的设计存在缺陷。如果失败,客户端将重试连接到服务器。这在网络或繁重的服务器负载问题中是需要的。但是错误的客户端凭据会导致不断失败。

有一些解决方案:

  1. 客户端-服务器连接可以故障转移到未加密模式 (从管道中移除 SslHandler)。
  2. 客户端在知道它是 SSL 异常时可能会死掉并抛出异常。

不幸的是,我不知道如何使用 Netty 来实现它。几个问题:

  1. 如何检测它的 SSL 异常?
  2. 如何安全地从两侧移除 SslHandler?

请在这里帮忙。

【问题讨论】:

    标签: ssl netty


    【解决方案1】:

    据我所知,没有安全的方法可以将 SSL 连接降级为纯文本连接。

    要检测握手失败,需要实现userEventTriggered()处理方法:

    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
        if (evt instanceof SslHandshakeCompletionEvent) {
            if (!((SslHandshakeCompletionEvent) evt).isSuccess()) {
                // handshake failed
            }
        }
    }
    

    您还可以为握手未来添加监听器:

    ChannelPipeline p = ...;
    SslHandler sslHandler = p.get(SslHandler.class);
    sslHandler.handshakeFuture().addListener(new FutureListener<Channel> { ... });
    

    【讨论】:

      猜你喜欢
      • 2018-07-28
      • 2021-07-03
      • 2018-04-14
      • 2012-10-11
      • 2015-03-16
      • 2021-12-28
      • 2018-10-17
      • 2016-04-29
      相关资源
      最近更新 更多