c++ - 准备两个具有相同 SSL_CTX 状态的应用程序数据
问题描述
有没有办法准备两个具有相同 SSL_CTX 状态(相同序列号和密码状态)的应用程序数据记录,然后只将其中一个写入 fd?或者,作为替代方案,SSL_CTX 状态导出/导入的任何方法?
解决方案
SSL 上下文 (SSL_CTX) 不是当前 TLS 会话的状态。相反,它只是一组可用于多个 TLS 会话的通用设置。它还不包含任何序列号或交换的密钥。请参阅什么是 SSL 上下文?.
您可能的意思是 SSL 会话本身的状态,其中包含要使用的密码套件、序列号、加密密钥等。此会话没有预先准备好,但它是客户端和 TLS 握手的结果服务器。在此范围内,它与完成 TLS 握手的底层连接耦合(通常是 TCP 连接,但理论上也可以是任何数据流)。
我不知道 OpenSSL 提供的任何方法来序列化和反序列化正在运行的 SSL 会话的完整状态,即继续现有 TLS 连接所需的一切。可以做的是分叉当前进程,在这种情况下,子进程将拥有会话状态的精确副本。并非子和父中的状态不同步,即只有其中一个应该与 SSL 会话交互。
还可以做的是获取SSL_SESSION
对象。这并没有完整描述当前 SSL 会话的状态(即没有序列号),但它包括密码和加密密钥等内容。这个对象实际上可以使用i2d_SSL_SESSION进行序列化,并且可以用于在另一个进程中恢复相同的会话 - 只要服务器支持它。SSL_SESSION
甚至可以同时被多个连接使用。
推荐阅读
- raspberry-pi - 如何在树莓派中为 Odoo 安装 wkhtmltopdf?
- excel - Excel IF 函数
- r - 使用 plyr 合并数据框以绘制多个时间序列
- c# - 我可以使实体框架忽略继承吗?
- .net-core - 如何在 .Net Core 3.1 Unity Framework 中使用配置文件
- sql - 带来多年(oracle plsql)
- sql - 使用 xQuery 获取 XML 格式的 SQL 结果
- php - 请解决我在 laravel 中的包问题
- arrays - Swift 需要数组按 2 个属性排序,其中一个包含逗号
- javascript - 在 Vue js 中渲染动态组件需要帮助