0

ネットワーク上にあり、TCP を使用して互いに通信する多数のマシンがあるとします。

私の要求は次のとおりです。

  • データは暗号化する必要があります。
  • 同じネットワーク上であっても、許可されていないマシンにデータを送信してはなりません。
  • 許可されていないマシンからデータを受信して​​はなりません。
  • マシンは、他のマシンの IP アドレスしか知りません。

より想像しやすいように、許可されたクライアントのみが参加を許可され、すべての通信が暗号化されるチャット ネットワークを考えてみてください。

私の最初のアイデアは、TLS 証明書を使用することでした。

  • 承認された各マシンには、その証明書のコピーがあります。
  • 証明書を使用して、接続を暗号化できます。
  • サーバー側で証明書を使用すると、サーバーの検証に使用できます。
  • クライアント側で証明書を使用すると、クライアントの認証に使用できます。
  • 許可されていないマシンは証明書を持っていないため、データの暗号化を解除したり、送信したり、受信したりすることはできません。

理論的には、これは期待どおりに機能するはずです。実際には、そうではありません。

問題の 1 つは、マシンが互いの IP アドレスしか認識しておらず、ドメイン名にバインドする必要がないことです。証明書は IP アドレスには推奨されません (また、Node.js は IP アドレスを CN として使用する証明書を検証することさえしません)、IP アドレスは時間の経過とともに変化する可能性があるため、それが正しいアプローチであるかどうかを考え始めました。

もちろん、これらすべてを自分で実装することもできます: 暗号化層、認証スキーマ... しかし、その後は実行しません。これを解決するより便利な方法があれば、これに感謝します。

したがって、基本的には、ドメイン名へのバインディングのためではなく、特定の証明書が存在するため、暗号化と認証に TLS 証明書を使用することになります。

これをどのように実装し、上記の問題を解決しますか? または - 私は完全に間違った方向に走っていますか? これをより良い方法で解決するにはどうすればよいですか?

4

0 に答える 0