相关疑难解决方法(0)

如何在一个进程中接受 SSL 连接并在另一个进程中重用相同的 SSL 上下文

我花了相当多的时间研究如何解决这个问题,但还没有找到可行的解决方案。

问题: 我正在使用 OpenSSL 库和 linux。我有一个服务器进程 P1 接受来自 SSL 客户端的 SSL 连接。P1 执行 tcp_accept() 然后 SSL_accept() 并使用 SSL_read/SSL_write() 与客户端交换一些协议数据。到目前为止一切都很好。现在按照设计,P1 需要分叉一个子进程 C1 来为客户端提供服务。C1 使用 execve 调用来重新映像自身并生成不同的二进制文件。C1 仍然需要通过在 P1 中使用的相同 SSL 连接与 SSL 客户端通信。问题是因为 C1 是一个完全不同的过程,现在它如何为该客户端重新使用现有的 SSL 连接?我能够将底层 TCP 套接字描述符从 P1 传递到 C1,因为它在内核中维护,但我无法传递 SSL 上下文,因为它在 Openssl 库中维护。

我在 stackoverflow 上看到了这个步骤,但不幸的是没有提到解决方案。 OpenSSL:接受 TLS 连接,然后转移到另一个进程

可能的解决方案: 我不确定是否有人已经解决了此类问题,但我尝试了以下操作。

  1. 我以为我可以创建一个新的 SSL 上下文并在新的子进程中进行 SSL 重新协商。因此,在 C1 中,我在相同的底层 tcp 套接字 fd 上创建了一个新的 SSL 上下文,并尝试进行 SSL 重新协商。这是我所做的(省略 SSL_ctx 初始化部分)

    ssl = SSL_new(ctx) // ctx 的初始化与在 P1 服务器中完成的相同
    SSL_set_fd(ssl, fd); …

c sockets linux ssl openssl

5
推荐指数
1
解决办法
3979
查看次数

标签 统计

c ×1

linux ×1

openssl ×1

sockets ×1

ssl ×1