OpenSSL:接受TLS连接,然后转移到另一个进程

jal*_*alf 6 c++ sockets linux posix openssl

我们有一个(Linux)服务器运行两个进程,A和B.目前,客户端建立到进程A的连接,进程A然后将生成的套接字的文件描述符传递给进程B,允许进程B使用现有的fd/socket无缝通信与客户.然后,客户端和进程B执行TLS握手并继续讨论生成的TLS连接.

(我在这里留下了大量的细节,但对了,还有就是对具有进程A充当一个中介一个很好的理由,而不是只连接到直接处理B)

现在,因为<long complicated story involving new client applications and websockets>看起来我们可能必须在进程A中执行TLS握手,然后将已建立的TLS连接传输到进程B.

那可能吗?可以复制底层套接字的文件描述符(我们已经这样做了),并且至少在理论上,内部TLS状态数据也可以被复制并用于重建进程B中的TLS连接,从而有效地接管连接.

但OpenSSL是否暴露了这样的设施?我发现这个函数d2i_SSL_SESSION似乎对OpenSSL会话对象做了类似的事情,但对于OpenSSL来说还不是新手,我不确定这是否足够.会议,背景,BIO和其他一些复杂的术语涉及到.需要多少序列化并转移到流程B才能使其正常工作?如何在实践中完成?

切换需要对客户端100%透明:它必须简单地对给定的IP /端口执行SSL握手,然后继续讨论生成的套接字,而不知道一个进程接受连接并执行TLS握手,然后另一个握手处理所有后续通信.

dav*_*mac 0

我认为这是不可能的,因为初始握手的一部分是密钥交换,并且持续的通信需要密钥。进程 B 需要知道远程端和进程 A 使用的密钥。