Node.js 将SSL密钥和证书文件传递到Socket.IO安全吗?

Node.js 将SSL密钥和证书文件传递到Socket.IO安全吗?,node.js,sockets,ssl,https,socket.io,Node.js,Sockets,Ssl,Https,Socket.io,我正在使用Socket.IO 为了通过HTTPS在端口3000上进行通信,我需要传递我的SSL密钥和证书文件 Socket.IO是一个开源项目,我不知道允许它访问我的证书和密钥文件等安全文件有多可靠 以下是Socket.IO中的代码,它通过nodeJS在服务器端运行: var fs = require('fs'); var https = require('https'); var express = require('express'); var app = express(); var

我正在使用
Socket.IO

为了通过
HTTPS
端口3000
上进行通信,我需要传递我的
SSL密钥
和证书文件

Socket.IO
是一个开源项目,我不知道允许它访问我的证书和密钥文件等安全文件有多可靠

以下是
Socket.IO
中的代码,它通过
nodeJS
在服务器端运行:

var fs = require('fs');
var https = require('https');

var express = require('express');
var app = express();

var options = {
  key: fs.readFileSync('../chat/file.pem'),
  cert: fs.readFileSync('../chat/file.crt')
};

var server = https.createServer(options, app);
var io = require('socket.io')(server);
Socket.IO
使用安全吗?如果没有,建议采取哪些方法使其安全?


任何帮助都将不胜感激。谢谢。

首先,您必须决定是否信任socket.io。这是您在服务器上运行的代码。如果它是rogue,它可以对您的服务器环境执行各种操作,而不仅仅是SSL密钥。因此,这实际上根本不是一个SSL密钥问题。这只是一个关于您是否信任socket.io的问题。它被许多其他服务器使用。如果有一个已知的理由不相信它的代码,那将是公开的。所以,我想你可以说,没有众所周知的理由不相信它

其次,大多数人更信任开源项目,而不是封闭源代码项目,因为开源项目可以供所有人阅读和研究,而这些项目中任何故意流氓或邪恶的代码都可能被关注该项目的人发现。然而,对于一个封闭源代码项目,您必须在某种程度上盲目相信您获得封闭源代码工具的公司的意图和技能。没有公开审查封闭源代码的机会。我之所以提到这一点,是因为你的问题暗示,开源代码可能不像其他类型的代码那样安全,我不同意这种暗示

第三,您实际上根本没有将SSL密钥交给socket.io。您正在将它们传递给https模块,以便它可以创建您的服务器。该模块内置于node.js中。因此,在本例中,您实际上是在决定是否信任node.js(这也是一个开源项目)。创建服务器后,将已创建的服务器传递给socket.io模块,以便它可以向其附加事件侦听器

Socket.IO是否可以安全使用,安全性是否明智

对此没有通用的答案。与几乎所有的安全问题一样,它完全取决于您试图保护什么以及您试图保护它不受什么影响,并且在很大程度上取决于您的实现细节

简而言之,socket.io只是webSocket顶部的一个消息传递层

建议使用哪些方法来确保安全


同样,对于这个问题没有完全通用的答案。保护socket.io连接的大部分工作与保护web服务器完全相同。确保服务器安装和访问的安全。使用SSL保护传输。保护对SSL密钥的访问。智能地设计应用程序对所有这些工具的使用。找出你想要保护的内容以及你想要保护它的内容,并与该领域的专家一起进行非常详细的安全审查。

此处交叉发布:嘿,jfreind,你的回复太棒了。非常感谢你。你用超博学的内容澄清了我所问的每一个方面。再一次。先生,感谢您为初学者的众所周知的关注点和问题分享无价的信息。