【发布时间】: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。