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

时间:2018-10-07 18:20:03

标签: c++ c ssl optimization openssl

有没有办法准备两个具有相同SSL_CTX状态(相同序号和密码状态)的应用程序数据记录,然后仅将其中一个写入fd?或者,是否有其他方法可以用于SSL_CTX状态导出/导入?

1 个答案:

答案 0 :(得分:0)

SSL上下文(SSL_CTX)不是当前TLS会话的状态。相反,它仅是一组通用设置,可用于多个TLS会话。它尚不包含任何序列号或交换的密钥。参见What is SSL context?

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

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

还可以做的是获取SSL_SESSION对象。这并未完整描述当前SSL会话的状态(即无序列号),但其中包含诸如密码和加密密钥之类的内容。实际上,可以使用i2d_SSL_SESSION序列化该对象,并且可以在服务器支持的情况下将其用于恢复另一个进程中的同一会话。相同的SSL_SESSION甚至可以同时被多个连接使用。