我很难找到向目标服务器发送请求的机制,当套接字有要读取的数据时,将套接字传递给另一个进程以获取数据。
我到目前为止在Linux上使用epoll来实现它以便我进行握手,我发送请求并且请求到达,然后我将套接字fd传递给另一个进程以进行进一步处理,我明确保存SSL会话使用PEM_write_bio_SSL_SESSION
然后使用PEM_read_bio_SSL_SESSION
读取它并将其添加到上下文但我无法在另一个进程中读取ssl套接字,因为我得到内部错误或握手失败。
我已经阅读了这个article,但仍然找不到任何机制来解决这个问题。我知道这是因为openssl是应用程序级库,但必须有办法因为Apache已经这样做了。
至少,如果它不可能,有没有办法从openssl的会话中使用万能密钥解密来自套接字(我可以正常阅读)的数据?
答案 0 :(得分:3)
唯一可以做到这一点的方法是克隆SSL套接字的完整用户空间部分,该部分分布在多个内部数据结构中。由于您无法访问python中的所有结构,因此您只能通过克隆进程来执行此操作,即使用fork
。
请注意,一旦你分叉了进程,你应该只在其中一个进程中继续使用SSL套接字,即不能fork,在子进程中做一些工作然后在父进程中做一些工作。这是不可能的,因为一旦处理套接字,SSL状态就会发生变化,但只会在其中一个进程中发生变化。在另一个进程中,状态不同步,以后任何尝试使用此错误状态都会导致奇怪的错误。