web-dev-qa-db-ja.com

マルチサーバーアプリケーションで安全な通信とプロセス間認証を確保するには

:範囲を少し狭めるために質問を更新しました。

シナリオ

クライアント<->アプリケーションサーバー<->データサーバー

  • ユーザーはクライアントを使用してアプリケーションサーバーに接続し、実行するクエリを作成します。
  • アプリケーションサーバーは、認証と承認を処理します。
  • アプリケーションサーバーは、クエリ定義(not SQL)を承認情報と共にデータサーバーに送信します。
  • データサーバーは言われたことをします。

承認は、ユーザーが表示を許可または許可されていないテーブルおよびテーブルの列を決定します。また、ユーザーに表示を許可または禁止する列の値を指定することもできます。たとえば、ユーザーはクライアントXからの注文のみを表示するように制限されている場合があります。別のユーザーは、自分とチームメンバーの従業員データの表示を許可されている可能性がありますexcept給与情報(列)。

これはお客様のマシンにインストールされるソフトウェアスイートです。インストールは、複数のアプリケーションサーバーと複数のデータサーバーで構成される場合があります。

必要条件

データサーバーは実際のユーザーの認証や承認を行わないため、次のことを確認する必要があります。

  • クエリ実行リクエストは、自社のアプリケーションサーバーからのみ送信されます
  • 結果データの取得要求は、そのクエリ実行要求を送信した同じアプリケーションサーバーからのみ受け入れられます。
  • 認証および暗号化方式のオーバーヘッドは最小限に抑えられます(接続は要求ごとに確立され、各クエリ実行要求の後に多くの結果データ取得要求が続く場合があります)
  • アプリケーションサーバーとデータサーバーが物理的に異なるマシンで実行されている可能性があります

質問

要件が満たされていることを確認するために、アプリケーションサーバーとデータサーバー間の通信を設定するための最良の方法は何ですか?

現在HTTPSを使用していますが、アプリケーションとデータサーバー間の通信の認証とセキュリティをより簡単に、より良く、より速くできる場合は、他の通信方法を利用できます。

更新:

セキュリティを重視するIT部門が不快感を抱く(別のCAを信頼する)か、インストールを非常に困難/苦痛にする(クライアント証明書)ことを回避します。しかし、プロセスの認証とプロセス間を流れるデータのセキュリティは不可欠であるため、それが唯一の方法である場合は、錠剤を飲み込むだけです。

3
Marjan Venema

実用的で安全なアプローチは、クライアント証明書でSSLを使用することです。これは、おそらく既存のアプローチに似ています。

これを行う1つの方法は、すべてのサーバーが秘密鍵と自己署名証明書、および通信する必要があるすべてのサーバーの証明書を持っていることです。そのため、アプリケーションサーバーがデータサーバーに接続すると、両端が証明書を提示し、もう一方の端はコピーに対してチェックします。

これは少数のサーバーに適しています。それ以上の場合は、独自の内部認証局を作成する必要があります。各サーバーには、秘密鍵、内部CAによって署名された証明書、および内部CA自体の証明書があります。

このモデルでは、サーバー間の認証には適度なサーバー負荷がありますが、SSL接続を長時間開いたままにしておくことでこれを軽減するため、認証はたまにしか行われません。

1
paj28