首页 > 解决方案 > 准备两个具有相同 SSL_CTX 状态的应用程序数据

问题描述

有没有办法准备两个具有相同 SSL_CTX 状态(相同序列号和密码状态)的应用程序数据记录,然后只将其中一个写入 fd?或者,作为替代方案,SSL_CTX 状态导出/导入的任何方法?

标签: c++cssloptimizationopenssl

解决方案


SSL 上下文 (SSL_CTX) 不是当前 TLS 会话的状态。相反,它只是一组可用于多个 TLS 会话的通用设置。它还不包含任何序列号或交换的密钥。请参阅什么是 SSL 上下文?.

您可能的意思是 SSL 会话本身的状态,其中包含要使用的密码套件、序列号、加密密钥等。此会话没有预先准备好,但它是客户端和 TLS 握手的结果服务器。在此范围内,它与完成 TLS 握手的底层连接耦合(通常是 TCP 连接,但理论上也可以是任何数据流)。

我不知道 OpenSSL 提供的任何方法来序列化和反序列化正在运行的 SSL 会话的完整状态,即继续现有 TLS 连接所需的一切。可以做的是分叉当前进程,在这种情况下,子进程将拥有会话状态的精确副本。并非子和父中的状态不同步,即只有其中一个应该与 SSL 会话交互。

还可以做的是获取SSL_SESSION对象。这并没有完整描述当前 SSL 会话的状态(即没有序列号),但它包括密码和加密密钥等内容。这个对象实际上可以使用i2d_SSL_SESSION进行序列化,并且可以用于在另一个进程中恢复相同的会话 - 只要服务器支持它。SSL_SESSION甚至可以同时被多个连接使用。


推荐阅读