c++ - 准备两个具有相同 SSL_CTX 状态的应用程序数据

标签 c++ c ssl optimization openssl

有没有办法准备两个具有相同 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/

相关文章:

c++ - boost Asio : waiting until thread_group has processed all posted tasks?

c++ - 多连接套接字c++

c++ - C++ 中的 Lambda 通用性

c - 如何存储来自 sqlite3_open 的数据库连接句柄?

ssl - 使用 Docker For Mac 和 SSL 设置开发 kubernetes 集群

node.js - 如何信任使用 https 的自签名证书?

c++ - c 中的 pow() 函数给我带来错误的结果

c - 按钮在 Windows GUI 应用程序(而不是 Windows native )上看起来很难看

c - 两条等效线评估不同的结果[位移位]

javascript - 由于 "ERR_CERT_DATE_INVALID",连接到 websocket 失败