Nettyフレームワークで初心者です。サーバー側からOpenSSLの「hello要求」を送信する方法がわかりません。Netty 4.1サーバー側からSSLセッション/ハンドシェイク(hello要求)を再起動する方法
ネッティーSSlHandler:
は、SSLセッションを再起動するには、セッションに
を再起動するには、既存のを削除する必要がありChannelPipelineから SslHandlerを閉じ、に て、新しいSSLEngineで新しいSslHandlerを挿入パイプラインを開き、最初のセクションで説明した のようなハンドシェイクプロセスを開始します。
私は、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ドキュメントで説明したように握手を再起動するユニークな方法であるため、セッションを再起動する必要があります。
次に、私は質問する必要があります:クライアントhttpsスヌープサーバーからクライアントのhelloを要求する方法はありますか。
OpenSSLには、サーバーからクライアントへhelloRequestを送信して「クライアントのHello」を待つ機能がありますが、どうすればよいですか。
Nettyの著者は間違っています。 「SSLセッションを再起動する」は無意味です。 JSSEとNIOレベルで実装が必要な場合は、既存の「SSLEngine」を使用して既存のSSLセッションに対して新しいハンドシェイクを発行できます。 – EJP
mmmしかし、httpsServer、TLSServer、またはソケットを使って自分のソケットチャネルを直接実装する必要がありますか? OpenSSLにはhello要求機能があり、nettyはOpenSSLを実装していますが、このメソッドを発行することはできませんか? –
あなたがしなければならないのは、私が見る限り、 'SSLEngine.beginHandshake()'を呼び出すことだけです。 – EJP