【问题标题】:SSL encryption over server to server socket.io connections通过服务器到服务器 socket.io 连接的 SSL 加密
【发布时间】:2014-04-17 11:53:13
【问题描述】:

我在不同的盒子上有 2 个 node.js 实例,它们使用 socket.io 进行通信。尽管它们位于防火墙后面的同一网络上,但我希望它们使用 SSL 加密进行通信。

以下工作正常:

服务器1:

require("socket.io").listen(9000);

服务器2:

require("socket.io-client").connect("wss://10.0.0.1:9000");

虽然我没有提供任何密钥对,但这里发生了什么?是否仅通过指定 wss: 就建立了安全通道?如果是这样,如何,没有任何钥匙?

顺便说一句,这不起作用......

require("socket.io-client").connect("https://10.0.0.1:9000");

(虽然 http: 可以)

【问题讨论】:

  • 您的 https 连接可能无法正常工作,因为您的服务器未配置为 https。

标签: javascript node.js websocket socket.io


【解决方案1】:

添加 wss 不会使连接使用 ssl。

在客户端,指定ssl连接有两种方式:

  • 像你一样使用 https
require("socket.io-client").connect("https://10.0.0.1:9000");
  • 使用 secure:true 选项
require("socket.io-client").connect("10.0.0.1:9000",{secure: true});

或者你可以同时做这两个来确定:

require("socket.io-client").connect("https://10.0.0.1:9000",{secure: true});

【讨论】:

  • 谢谢,但连接到 https: 不起作用。 websocket 需要在服务器端发生什么才能接受安全连接?我意识到您可以创建一个 https 服务器并将其传递给 socket.io 的监听方法(如下所示),虽然我不想要一个 https 服务器,但我想要一个安全套接字(tcp + ssl)。
  • var httpsServer = https.createServer(keys, handler).listen(443); require("socket.io").listen(httpsServer);
  • 你需要一个 http(s) 服务器来服务 websockets(见stackoverflow.com/questions/4590447/…
  • 在我的例子中,我在 websocket 服务器前面使用了一个 nginx 服务器来进行 ssl 终止。
  • 为什么我们需要一个 HTTP 服务器来提供 websocket 连接?它们是 2 个独立的协议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
相关资源
最近更新 更多