有没有办法准备两个具有相同 SSL_CTX 状态(相同序列号和密码状态)的应用程序数据记录,然后只将其中一个写入 fd?或者,作为替代方案,SSL_CTX 状态导出/导入的任何方法?
最佳答案
SSL 上下文 (SSL_CTX) 不是当前 TLS session 的状态。相反,它只是一组可用于多个 TLS session 的通用设置。它还不包含任何序列号或交换的 key 。参见 What is SSL context? .
您的意思可能是 SSL session 本身的状态,其中包含要使用的密码套件、序列号、加密 key 等。此 session 没有预先准备好,但它是 TLS 握手的结果客户端和服务器之间。到目前为止,它与完成 TLS 握手的底层连接耦合(通常是 TCP 连接,但理论上也可以是任何数据流)。
我不知道 OpenSSL 提供了任何方法来序列化和反序列化正在运行的 SSL session 的完整状态,即继续现有 TLS 连接所需的一切。可以做的是 fork 当前进程,在这种情况下,子进程将拥有 session 状态的精确拷贝。不是 child 和 parent 的状态不同步,即只有其中一个应该与 SSL session 交互。
还可以做的是获取 SSL_SESSION
对象。这并没有完整描述当前 SSL session 的状态(即没有序列号),但它包括诸如密码和加密 key 之类的东西。这个对象实际上可以使用 i2d_SSL_SESSION 序列化。并且可以用于在另一个进程中恢复相同的 session ——前提是服务器支持它。同一个 SSL_SESSION
甚至可以同时被多个连接使用。
关于c++ - 准备两个具有相同 SSL_CTX 状态的应用程序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691510/