将连接的SSL Socket传递给另一个进程

时间:2015-06-07 08:14:57

标签: python network-programming openssl m2crypto

我很难找到向目标服务器发送请求的机制,当套接字有要读取的数据时,将套接字传递给另一个进程以获取数据。 我到目前为止在Linux上使用epoll来实现它以便我进行握手,我发送请求并且请求到达,然后我将套接字fd传递给另一个进程以进行进一步处理,我明确保存SSL会话使用PEM_write_bio_SSL_SESSION然后使用PEM_read_bio_SSL_SESSION读取它并将其添加到上下文但我无法在另一个进程中读取ssl套接字,因为我得到内部错误或握手失败。

我已经阅读了这个article,但仍然找不到任何机制来解决这个问题。我知道这是因为openssl是应用程序级库,但必须有办法因为Apache已经这样做了。

至少,如果它不可能,有没有办法从openssl的会话中使用万能密钥解密来自套接字(我可以正常阅读)的数据?

1 个答案:

答案 0 :(得分:3)

唯一可以做到这一点的方法是克隆SSL套接字的完整用户空间部分,该部分分布在多个内部数据结构中。由于您无法访问python中的所有结构,因此您只能通过克隆进程来执行此操作,即使用fork

请注意,一旦你分叉了进程,你应该只在其中一个进程中继续使用SSL套接字,即不能fork,在子进程中做一些工作然后在父进程中做一些工作。这是不可能的,因为一旦处理套接字,SSL状态就会发生变化,但只会在其中一个进程中发生变化。在另一个进程中,状态不同步,以后任何尝试使用此错误状态都会导致奇怪的错误。