我正在编写将SSLEngine与NIO结合使用的应用程序,同时编写了客户端和服务器。
客户端能够连接到服务器,并且在他连接之后,我希望他能够执行会话恢复/重新协商,但是目前没有运气。

由于使用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

**我更愿意发布可以提供帮助的代码的任何部分(即使是完整的代码,尽管正如我所说的那样巨大。)

当我执行程序时,第一个连接成功,但是第二个导致异常:
javax.net.ssl.SSLHandshakeException: No existing session to resume

我错过了恢复ssl会话所需的某些成分吗?

最佳答案

如果您使用SSLContext.createEngine(host, port)创建SSLEngine,则SSLEngine将仅恢复会话。否则,它无法知道正在与谁交谈,因此无法知道要加入哪些SSLSession

10-06 03:01