我一直在尝试实现 TLS 服务器。 由于某些要求,我需要在一个进程上接受 TLS 握手,并在另一个进程(这些进程在不同设备上运行)上执行对称加密操作(以及 TLS 连接的其余部分)。 目前,我正在考虑 2 种可能的解决方案:
- 从 SSL 上下文中获取 key 、iv 和其他一些信息 - 通过 它们与套接字 fd 一起进入第二个进程 - 执行 enc/dec 并通过套接字连接发送/接收。普通加密/ 解密部分不是大问题,但其他东西(错误 检查、警报、重新谈判...)将是一场噩梦。
- 以某种方式将整个 SSL 上下文(SSL 结构)传递给第二个 处理并重用它。几年前我发现了几个关于这个的问题 方法,但都没有一个好的答案。
那么有什么方法可以使用 OpenSSL 执行第二种方法(有人建议使用 TLSe 项目,但我只想坚持使用原始的 OpenSSL)? 如果有人解决了这个问题,是否有更好的解决方案?
任何帮助将不胜感激。谢谢!
最佳答案
您可以在一个进程中执行 TLS 握手,然后 fork 一个新进程,TLS 握手中涉及的已接受套接字将与子进程共享,使用您可以在子进程中执行 send()/recv() 部分
如果这两个进程不相关,恐怕您无法在一个进程/设备上进行 TLS 握手并通过不同的套接字在另一个进程/设备上重用它
TLS 用于在两个端点之间创建安全隧道,两个端点相互验证(服务器验证客户端是可选的),您尝试的是不可能的,每个新连接都必须进行新的握手
SSL session 可以重复用于已经在它们之间进行握手的端点,当你想连接到全新的实体时它不适用于这里
关于c - 如何在一个进程中进行 TLS 握手并在另一个进程中处理其余连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47526767/