【问题标题】:How to encrypt socket.io client using CLI (instead of through browser)?如何使用 CLI(而不是通过浏览器)加密 socket.io 客户端?
【发布时间】:2020-12-03 19:55:46
【问题描述】:

这与其说是“我的代码有什么问题”,不如说是“这可能甚至是必需的”。我一直在使用 socket.io 和 socket.io 处理这个 CLI 聊天,然后我想“如果这是一个暴露在互联网上的生产服务器怎么办 - 这需要安全性吗?”

我在网上看到了很多关于使用 nginx 或 express(或两者)来实现这一点的内容 - 但如果您尝试通过 CLI 执行此操作,则没有提及任何类型的加密(例如,“node file.js " 这样可以安全地向网络服务器发送流量)。我已经尝试了一些示例(如提供的那样),然后调整了我现有的代码以包含相同的配置,但现在我开始认为这可能是不可能的,因为它们已经是安全的? (据我了解,服务器监听端口只是为了服务器将客户端绑定到另一个端口以发送数据)

我似乎无法从我发现的内容中找到一个简单明了的答案(过去的论坛帖子似乎相互矛盾)。

我尝试运行我的服务器并通过 2 个客户端连接(一个本地主机与服务器相同,一个在我的 LAN 上的另一个 IP 上)并运行 wireshark 以查看我是否可以看到我的另一台主机(我看不到) 但我可以看到正在发送未加密的流量...因此,虽然这不是向所有人广播流量,但如果您知道服务器和客户端用于通信的确切端口,那么窥探有多容易?

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

【问题讨论】:

    标签: javascript node.js websocket socket.io


    【解决方案1】:

    答案很复杂。简短的是:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 1970-01-01
      • 2014-04-13
      • 2012-08-28
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多