【问题标题】:Can Socket.io be used on node.js if node.js was compiled without openssl?如果 node.js 是在没有 openssl 的情况下编译的,Socket.io 可以在 node.js 上使用吗?
【发布时间】:2014-06-01 06:39:18
【问题描述】:

我正在嵌入式 sheeva 板上使用 Express 和 Socket.io 开发 node.js 项目(在busybox Linux 上运行的node.js 0.10.12)。由于它是嵌入式的,所以所有东西都是用稀疏选项构建的,并且没有安装加密的东西(node.js 是编译的 --without-openssl)。此服务器将在局域网上使用,不会传输或接收敏感信息,因此不需要加密。

当我使用节点运行此脚本时:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(3000);

节点失败,输出如下:

tls.js:67
    throw new Error('node.js not compiled with openssl crypto support.');
Error: node.js not compiled with openssl crypto support.
    at tls.js:67:9
    at NativeModule.compile (node.js:892:5)
    at NativeModule.require (node.js:861:18)
    at https.js:22:11
    at NativeModule.compile (node.js:892:5)
    at Function.NativeModule.require (node.js:861:18)
    at Function.Module._load (module.js:297:25)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/usr/share/nodeserver/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocket.js:10:13)

这是意料之中的,因为 node 是在没有 openssl 支持的情况下编译的。跟踪/usr/share/nodeserver/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocket.js 中的错误,这是导致问题的行:

https = require('https')

我知道我不能简单地评论它。有什么方法可以告诉 Socket.io 不要使用任何 https 和加密功能?

我四处搜索,发现了大量关于如何使用 Socket.io with openssl 的信息,但没有关于如何使用它没有... p>

【问题讨论】:

  • 您是否尝试注释掉 https 行?我认为你应该尝试一次。 Socket.io 的构建使其可以支持与 TLS 或其他方式的连接,因此如果您从 Socket.io lib 中删除所有加密内容,那么我认为它仍然可以工作。
  • 我确实尝试过,但它只是在 WebSocket.js 中使用该对象的地方失败了。
  • 我认为这是由于 CommonJS 标准和条件要求不被认为是好的。此外,作者会认为最好将两者捆绑在一起。单独提供一个可能不是一个好主意。
  • 我可能遗漏了一些东西,但是......为什么不使用 http 而不是 https?不行吗?
  • @Jarema IT 不起作用。我提到的前三行代码将触发错误。当我做require('socket.io')(server)server = require('http').Server())时,它会抛出错误node.js not compiled with openssl crypto support.engine.io 所需的 ws 模块(socket.io 所需的模块)始终调用 require('https')require('crypto')

标签: node.js express cryptography openssl socket.io


【解决方案1】:

如果你改变了

https://github.com/websockets/ws/blob/master/lib/WebSocketServer.js#L10

来自

  , crypto = require('crypto')

  , crypto = null

由于此对象仅用于安全连接 - 这不是一个很好的解决方案,因为您正在修改包含的模块,但它应该可以工作。

我认为这里实际上不需要修改(但在测试时您可能会发现需要):

https://github.com/websockets/ws/blob/master/lib/WebSocket.js#L13 https://github.com/websockets/ws/blob/master/lib/WebSocket.js#L572

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多