Warm tip: This article is reproduced from serverfault.com, please click

javascript-如何使用CLI(而不是通过浏览器)加密socket.io客户端?

(javascript - How to encrypt socket.io client using CLI (instead of through browser)?)

发布于 2020-11-28 16:47:15

这不是“我的代码有什么问题”,而更多的是“这是可能的,甚至是必需的”。我一直在使用socket.io和socket.io进行此CLI聊天,然后我想:“如果这是一台暴露于Internet的生产服务器,这需要安全吗?”

我在网上看到了很多有关使用nginx或express(或同时使用两者)实现此目标的信息-但如果你尝试通过CLI进行加密,则没有提及任何类型的加密(例如,为此使用“ node file.js”)以安全地向网络服务器发送流量)。我已经尝试了一些示例(如提供的那样),然后修改了我现有的代码以合并相同的配置,但是现在我开始认为也许不可能,因为它们已经安全了吗?(据我了解,服务器侦听端口仅用于服务器将客户端绑定到另一个端口以发送数据)

从我发现的内容来看,我似乎找不到一个干脆的答案(过去的论坛帖子似乎与此相互矛盾)。

我尝试运行服务器并通过2个客户端(一个与服务器相同的本地主机,另一个在LAN上的另一个IP上)进行连接,然后运行wireshark看看是否可以看到其他主机(我无法看到),但是我可能会看到未加密的流量正在发送...因此,尽管这不是向所有人广播的流量,但是如果你知道确切的端口服务器和客户端正在使用的通讯方式,那么侦听这将有多容易?

希望有人可以帮助解释这些细微差别

Questioner
orgg
Viewed
11
Newbie 2020-12-03 19:55:46

长答案很复杂。简短的是:

你通过电汇发送的任何内容都很容易被欺骗。这就是存在基于TLS的TCP的原因。通过TLS安全通道进行的任何通信都可以确保你的客户端和服务器之间的数据是秘密的(只要你信任服务器就可以使用)。

Socket.io在幕后使用WebSocket(与用于TLS上的HTTP的HTTPS相同)和用于TLS上的WS的WSS。因此,如果将服务器设置为接受WSS(可能只有WSS以确保没有未加密的连接在进行),并且确保将客户端连接到wss://....端点,则已经实现了客户端-服务器的安全性。就这么简单。

如果你不信任服务器,并且你实际上在做的是消息代理,则可以进一步尝试端到端加密(https://en.wikipedia.org/wiki/End-to-end_encryption)。