【问题标题】:Netty 4.1 How to restart SSL session/handshake (hello request) from server sideNetty 4.1 如何从服务器端重新启动 SSL 会话/握手(hello 请求)
【发布时间】:2018-04-07 18:46:29
【问题描述】:

我是 Netty 框架的新手,我不知道如何从服务器端发送 OpenSSL 'hello request'。

Netty SSlHandler:

重启会话

要重新启动 SSL 会话,您必须删除现有的已关闭 来自 ChannelPipeline 的 SslHandler,插入一个新的 SslHandler 新的 SSLEngine 进入管道,并开始握手过程 在第一节中描述。​​

我有基于 SnoopServer 示例的 HTTPS 服务器,但是当我尝试重新启动 ssl 时,没有任何效果。

例如

// reset ssl session from server's HttpHandler 
SslContext sslCtx = null;
SelfSignedCertificate selfSignedCert;
try {
    selfSignedCert = new SelfSignedCertificate();
    sslCtx = SslContextBuilder.forServer(selfSignedCert.certificate(), selfSignedCert.privateKey()).sslProvider(SslProvider.JDK).build();
    } catch (CertificateException | SSLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

((SslHandler) ctx.pipeline().get("ssl")).close(ctx, ctx.newPromise());

if (ctx.pipeline().remove("ssl") != null && sslCtx != null) {
   ctx.pipeline().addFirst("sslNew", sslCtx.newHandler(ctx.channel().alloc()));
}

我需要重新启动会话,因为它是重新启动握手的独特方式,如 netty.io 文档中所述。

那我要问了:有没有什么方法可以从netty https snoop server请求client hello?

OpenSSL 能够从服务器向客户端发送 helloRequest 并等待“客户端 Hello”,但如何?

【问题讨论】:

  • Netty 作者搞错了。 “重新启动 SSL 会话”毫无意义。无论他们的实现可能需要什么,在 JSSE 和 NIO 级别,您都可以使用现有的SSLEngine 在现有 SSL 会话上发出新的握手。
  • mmm 但是我应该直接用 httpsServer 或 TLSServer 或套接字实现我自己的套接字通道吗? OpenSSL有hello请求能力,netty实现了OpenSSL,难道netty不能发出方法吗?
  • 据我所知,您需要做的就是致电SSLEngine.beginHandshake()。
  • 但是您必须告诉我们您或他们所说的“重新启动 SSL 会话”是什么意思。没有这样的操作。
  • 是的,我想要的是从服务器端发送一个Hello Request,与客户端问候、服务器问候、密码交换等进行新的握手......我不'不知道直接调用sslEngine 的beginHandshake() 方法的正确方法是什么,也许我应该使会话无效或重新启动它。例如。当浏览器调用 localhost:8443/handshake 时,HttpHandler 接收到HttpRequest 并发出restart handshake method。

标签: java ssl https netty


【解决方案1】:

您可以随时开始新的握手,而且您当然不需要为此需要一个新的SSLEngine。

不过这个

  • 更新当前会话,至少通过建立新的会话密钥,或可能更改密码套件或获取对等证书,或
  • 如果您已使旧会话无效,则创建一个新会话。

它不“重启”会话。没有这样的操作。

【讨论】:

  • 嗯,我试图发出新的握手,没有重新启动会话。我尝试beginHandshake() 方法,方法是在之前使会话无效并且之前不使会话无效,并且没有任何东西使客户端发送一个新的客户端问候。我不需要重新启动会话实际上我只需要在每次需要时接收一个新的客户端问候,因为客户端在我需要记录的 ssl 扩展中添加了信息。
  • 目前唯一的方法是重置 tcp
猜你喜欢
  • 2019-07-26
  • 2012-09-03
  • 2017-10-09
  • 2016-09-23
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多