0

给定一组在网络上的机器,它们将使用 TCP 相互通信。

我的要求是:

  • 数据必须加密。
  • 数据不得发送到未经授权的机器,即使它位于同一网络上。
  • 不得从未经授权的机器接收数据。
  • 机器只知道其他机器的 IP 地址。

为了更好的想象,想象一个聊天网络,只有授权的客户才能参与,所有的通信都要加密。

我最初的想法是使用 TLS 证书:

  • 每台授权机器都有该证书的副本。
  • 使用证书可以加密连接。
  • 使用服务器端的证书,它可以用来验证服务器。
  • 在客户端使用证书,它可以用来验证客户端。
  • 由于未经授权的机器没有证书,它们无法解密、发送或接收数据。

从理论上讲,这应该可以按预期进行。在实践中,它没有。

问题之一是机器只知道彼此的IP地址,它们不需要绑定域名。由于不建议将证书用于 IP 地址(Node.js 甚至不会验证 IP 地址为 CN 的证书),而且 IP 地址甚至可能随着时间而改变,我开始思考这是否是正确的方法。

当然,我可以自己开始实现所有这些:加密层,身份验证模式,......但我不会在那之后运行。如果有更方便的方法来解决这个问题,我将不胜感激。

因此,基本上归结为使用 TLS 证书进行加密和身份验证,不是因为绑定到域名,而是因为存在特定的证书。

我将如何实现这一点并解决上述问题?或者——我是在朝着完全错误的方向奔跑吗?我该如何以更好的方式解决这个问题?

4

0 回答 0