可以在共享内存(SHM)中使用OpenSSL会话池
OpenSSL session pool in shared memory (SHM) possible?
我想在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上获得。
不要。两个原因
- 文件描述符(在基础插座中使用)无法共享进程之间。
- Openssh使用了很多指针。共享的物理内存可能具有不同的虚拟地址。这意味着一个过程中的指针将指向另一个过程中错误的位置。因此,当使用共享内存时,您需要使用偏移。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何在openssl-ecc中获取十六进制格式的私钥
- 为多个会话保留XPtr
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- OpenSSL TLS服务器-使用客户端证书白名单
- 如何修复 Onnx运行时会话>运行问题?
- 通过 Openssl 命令行加密,通过 c++ 解密
- 使用已使用 java 编码的 openssl 解码数据
- OpenSSL没有共享密码
- OpenSSL 解密功能无法正常工作
- OpenSSL BIO and SSL_read
- 如何在OpenSSL库的名称中添加后缀'd'?
- 为什么 KMS drmModeSetCrtc() 在 X11 会话中运行时会失败并被拒绝权限?
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 验证openssl c++中的签名,这是由JAVA DSA签名的?
- 可以在共享内存(SHM)中使用OpenSSL会话池