【问题标题】:Pass tls.CleartextStream instance to worker process将 tls.CleartextStream 实例传递给工作进程
【发布时间】:2012-10-09 22:04:32
【问题描述】:

我想将tls.CleartextStream 实例传递给工作进程(由cluster.fork() 方法创建)。虽然我可以使用send(message, handle) 方法发送net.Socket 实例,但使用ClearStream 类却不能这样做。

是否有办法通过序列化原始 CleartextStream 实例来“重新包装”连接的原始套接字?

这就是我想要实现的:Node.js 应用程序的主进程正在监听 TLS 连接。有许多特定的工作进程在启动时产生。连接到主进程的客户端希望被重定向到某个工作进程。因此 master 应该将 socket 发送到相应的 worker 进程。这实际上是可行的,但是随着 TLS 上下文丢失,工作进程既不能解密也不能编码数据以与连接的客户端通信。

您知道如何实现吗?

【问题讨论】:

    标签: node.js sockets tcp ssl


    【解决方案1】:

    以安全可信的方式传递已连接的 TLS 连接是一个难题。

    最简单的方法是在 Master 进程上进行 TLS 解码/编码,然后将数据本身发送给各个工作人员。为了保持该网络连接的安全,您可以在主服务器和工作服务器之间创建另一个 TLS 会话。主要的警告是性能瓶颈的可能性

    您可以使用 stream.pipe http://nodejs.org/api/stream.html#stream_stream_pipe_destination_options 将两个 TLS 流双向连接。

    编辑:请仔细阅读问题。由于工作进程在同一台机器上,因此您不必在主进程和工作进程之间使用 TLS。

    【讨论】:

      【解决方案2】:

      在 fork 之后,每个 worker 都是一个独立的处理器,拥有自己的地址空间。跨进程边界传递 fd 或 socket 可能不起作用。

      我同意 Eric,最好的办法是使用 stream.pipe()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多