2017-10-26 7 views
0

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」を待つ機能がありますが、どうすればよいですか。

+2

Nettyの著者は間違っています。 「SSLセッションを再起動する」は無意味です。 JSSEとNIOレベルで実装が必要な場合は、既存の「SSLEngine」を使用して既存のSSLセッションに対して新しいハンドシェイクを発行できます。 – EJP

+0

mmmしかし、httpsServer、TLSServer、またはソケットを使って自分のソケットチャネルを直接実装する必要がありますか? OpenSSLにはhello要求機能があり、nettyはOpenSSLを実装していますが、このメソッドを発行することはできませんか? –

+0

あなたがしなければならないのは、私が見る限り、 'SSLEngine.beginHandshake()'を呼び出すことだけです。 – EJP

答えて

0

いつでも好きなときに新しいハンドシェイクを始めることができます。ではなく、には新しいSSLEngineが必要です。あなたの場合は、新しいセッションを作成します

しかし、この

  • のいずれかは、新たなセッションキーを確立する、または可能性の暗号スイートを変更するか、ピア証明書を取得することで、最低でも、現在のセッションを更新し、または
  • 古いセッションを無効にしました。

セッションを「再起動」します。そのような操作はありません。

+0

さて、セッションを再開せずに新しいハンドシェイクを発行しようとしていました。私は 'beginHandshake()'メソッドを前にセッションを無効にして、またセッションを無効にする前に試してみました。クライアントは新しいクライアントをhelloに送りません。セッションを再開する必要はありません。実際には、クライアントが必要なたびに新しいクライアントのhelloを受信する必要があります。これは、クライアントがssl拡張機能で情報を追加するためです。 –

+0

これを行う唯一の方法は、tcpのリセットです –

関連する問題