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

OpenSSL session pool in shared memory (SHM) possible?

本文关键字:OpenSSL 会话 SHM 共享 内存      更新时间:2023-10-16

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

我确实在旧的论坛线程上读到了这是不可能的,但是接近2017年还是现在是这样的,或者现在有一种方法可以放入SHM SSL处理程序,以及TLS Session创建和需要的内容?

我在Linux上的C或C 开发。

编辑:暂停,因为根据意见。您能向我解释问题中表达了什么意见?

谢谢

是的,这是可能的。例如,Apache可以很好地管理它。nginx也是如此。(请注意,这里共享的内容是特定的TLS session ,而不是连接本身。)

我不熟悉如何实现这一目标,但是两个应用程序都是开源的,因此您可以研究其源代码以查找。

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

第一步是注册:

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

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

使用此方法的示例代码可在GitHub上获得。

不要。两个原因

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