web-dev-qa-db-ja.com

サーバー間のHTTP通信の保護

内部サーバー間のHTTP通信を保護するためのスキームを考え出そうとしています。

そこに確立されたスキームはありますか?私たちが持っている要件は次のとおりです。

  1. クライアントとサーバーは物理的に異なる場所にあり、インターネットを介して通信する必要があります。
  2. クライアントは、自分が話していると思うサーバーと話していることを保証する必要があります。
  3. サーバーは、クライアントが通信していると思うクライアントと通信していることを保証する必要があります。
  4. サーバーは、侵害された場合に特定のクライアントとの通信をブロックできる必要があります。
  5. 鍵などの配布を可能にする安全な帯域外通信が存在します。

私たちの現在の考えは、SSLを使用してすべての通信を保護することです。サーバーの証明書を検証するための証明書チェーンは、安全な帯域外通信を使用してクライアント(およびクライアントのみ)に配布されます。クライアントがサーバーと通信するときは常に、この証明書チェーンを使用するように固定されています。これにより、クライアントが正しいサーバーと通信していることが保証され、サーバー側で、半信頼クライアントのセットの1つと通信しているという緩やかな保証が得られます。

クライアントごとに公開鍵と秘密鍵のペアが生成されます。公開鍵はサーバーに保管されます(安全な帯域外通信を介して)。次のワークフローは、クライアントの認証に使用されます。

セッショントークンは、その後のすべてのリクエストで送信されます。セッショントークンは取り消される可能性があります。クライアントが危険にさらされている場合、その公開鍵をサーバーから削除し、そのクライアントに関連付けられているすべてのセッショントークンを取り消すことができます。

これを行うためのより良い方法はありますか?考慮していないことはありますか?

6
ICR

IPSecを使用して、安全なVLANを作成します。 HTTPSよりもパフォーマンスが良く、より安全です(ペイロードはプレーンテキストではなくなります)。独自のPKIインフラストラクチャを使用でき、いくつかのカスタムコードを使用して、strongswanをシステムに簡単に統合できます。接続のほぼすべての段階にフックを提供します。さらに、クライアント認証(マシン証明書)も取得できます。

2
MemCtrl