3

NIOでSSLEngineを使用するアプリケーションを作成しています。クライアントとサーバーの両方を作成しています。クライアントはサーバーに接続できます。接続後、セッションの再開/再ネゴシエーションを実行できるようにしたいと思いますが、現在は運がありません。

SSLEngineを使用するコードはかなり大きいので(SSLEngineの使用法は非常に複雑です!)、状況を示す簡単な擬似コードを記述します。

Server:
    global sslcontext initialized once
    await new client
    client.sslEngine = create new server ssl engine using the global sslcontext
    client.handleHandshake and wait for it to be done
    handle client.

Client:
    global sslcontext initialized once
    sslEngine = create new client ssl engine using the global sslcontext
    performHandshake and wait for it to be done
    disconnect (close gracefully the connection)
    sslEngine = create new client ssl engine using the global sslcontext
    configure engine to not allow session creation
    performHandshake and wait for it to be done

**私はそれから助けになるコードの任意の部分を投稿することをいとわない(私が言ったようにそれは巨大ですが完全なコードでさえ..)

プログラムを実行すると、最初の接続は成功しますが、2番目の接続で例外が発生します。

javax.net.ssl.SSLHandshakeException: No existing session to resume

SSLセッションの再開に必要ないくつかの成分を見逃しましたか?

4

2 に答える 2

6

SSLEngineは、 SSLContext.createEngine(host、port)を使用して作成した場合にのみセッションを再開します。そうでなければ、誰と話しているのかを知る方法がないので、何SSLSessionに参加するのかを知る方法がありません。

于 2012-05-15T23:26:29.930 に答える
0

SSLContextはシングルトンである必要があります。netty4.0.44.FinalSslContextBuilderを使用できます。動作はsessionIdによってセッションを再開します。

private  SslContext sslContext;
...

if (serverSSLContext == null) {
    serverSSLContext = SslContextBuilder.forServer(new File("cert.crt"), new File("cert.key")).build();
}
channelPipeLine.addLast(serverSSLContext.newHandler(channelPipeLine.channel().alloc()));
于 2017-02-20T16:06:52.273 に答える