可以在共享内存(SHM)中使用OpenSSL会话池吗?

时间:2016-12-25 17:48:31

标签: c++ c openssl

我想在SHM中创建一个TLS连接/会话池,这样我就可以在多个进程中使用TLS连接(当然不是在同一时间)。

我确实读过旧的论坛帖子,认为这是不可能的,但接近2017年仍然是这样,或者现在有一种方法可以在SHM中放入SSL处理程序以及TLS会话创建和需要的内容吗?

我在Linux上用C或C ++开发。

编辑:根据意见暂停。你能解释一下这个问题中表达的意见吗?

谢谢

3 个答案:

答案 0 :(得分:2)

是的,这是可能的。例如Apache manages it just fineSo does nginx.(请注意,此处共享的内容特别是TLS 会话,而不是连接本身。)

我不熟悉这是如何实现的,但这两个应用程序都是开源的,所以你可以研究它们的源代码来查找。

答案 1 :(得分:1)

确实可以跨进程共享SSL上下文,但SSL-session-context需要驻留在(工作)进程可访问的共享内存位置。

第一步是注册回调:

SSL_CTX_sess_set_new_cb(ctx, shared_ctx_new_cb); 

SSL_CTX_sess_set_get_cb(ctx, shared_ctx_get_cb);

SSL_CTX_sess_set_remove_cb(ctx, shared_ctx_remove_cb);

确保始终在共享内存中创建适当的SSL-session-context(或至少返回一个序列化且可以使用的可寻址指针SSL_SESSION

要(de)序列化SSL_SESSION C结构,请使用可用的API d2i_SSL_SESSION(...)i2d_SSL_SESSION(...)

使用此方法的示例代码可在github上找到。

答案 2 :(得分:-1)

不要。 2个理由

  1. 无法在进程之间共享文件描述符(在底层套接字中使用)。
  2. OpenSSH使用了很多指针。共享物理物理内存可能具有不同的虚拟地址。这意味着一个进程中的指针将指向另一个进程中的错误位置。因此,在使用共享内存时,您需要使用偏移量。