如何在一个进程中执行TLS握手并在另一个进程中处理其余的连接?

时间:2017-11-28 08:10:48

标签: c linux sockets ssl openssl

我一直在尝试实现TLS服务器。 由于某些要求,我需要在一个进程上接受TLS握手,并在另一个进程上执行对称加密操作(以及其余的TLS连接)(这些进程在不同的设备上运行)。 目前,我正在考虑两种可能的解决方案:

  1. 从SSL上下文获取密钥,iv和其他一些信息 - 通过 它们与套接字fd一起进入第二个进程 - 执行enc / dec 并通过套接字连接发送/ recv。正常加密/ 解密部分不是一个大问题,而是其他的东西(错误 检查,警报,重新谈判......)将是一场噩梦。
  2. 以某种方式将整个SSL上下文(SSL结构)传递给第二个 处理并重用它。几年前我发现了几个问题 方法,但他们都没有一个很好的答案。
  3. 那么有没有办法用OpenSSL做第二种方法(有人建议使用TLSe项目,但我只想坚持使用原始的OpenSSL)? 如果有人解决了这个问题,有没有更好的解决方案?

    任何帮助都将受到高度赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在一个进程中执行TLS握手,然后分叉一个新进程,TLS握手中涉及的接受套接字将与子进程共享,您可以在子进程中执行send()/ recv()部分< / p>

如果两个进程无关,我恐怕你无法在一个进程/设备上进行TLS握手,并在另一个进程/设备上通过不同的套接字重用它

TLS用于在两个端点之间创建安全隧道,两个端点相互认证(对于服务器验证客户端是可选的),您正在尝试的是不可能的,每个新连接必须经历新的握手

SSL会话可以重复用于已经在它们之间进行握手的端点,当您想要连接到全新的实体时,它不适用于此处