【发布时间】: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