セキュリティ ブランケット ネゴシエーション

セキュリティ ブランケットは、プロセス内のすべてのプロキシ、または特定のインターフェイス プロキシのみに適用されるセキュリティ設定を記述する値のグループです。 セキュリティ ブランケットは、次の値で構成されます。

  • 認証サービス
  • 承認サービス
  • プリンシパル名
  • 認証レベル
  • 偽装レベル
  • 認証 ID
  • 機能
  • アクセス制御リスト (ACL) (サーバーのみ)

セキュリティ ブランケット ネゴシエーションは、COM がプロキシの作成時にそのセキュリティ設定を選択するために使用するプロセスです。 このプロセスには、サーバーのセキュリティ ブランケットとクライアントのセキュリティ ブランケットを比較し、それらの値を使用してプロキシに適切な既定のセキュリティ ブランケットを作成することが含まれます。 次の段落では、クライアントとサーバーのセキュリティ ブランケットの出所と、COM がクライアントとサーバーのセキュリティ ブランケットを使用してプロキシのセキュリティ ブランケットをネゴシエートする方法について説明します。

クライアントとサーバーは、それぞれ CoInitializeSecurity を呼び出して、それぞれのセキュリティ ブランケットを指定できます。 アプリケーションが CoInitializeSecurity を明示的に呼び出さない場合、COM は適切な既定値を使用して、アプリケーションに対して暗黙的に呼び出します。 これらの既定値の詳細については、「COM セキュリティの既定値」を参照してください。

CoInitializeSecurity のパラメーターの中には、アプリケーションがサーバーである場合に適用されるパラメーターと、アプリケーションがクライアントである場合に適用されるパラメーターがあります。 アプリケーションがサーバーとして機能する場合、ACL、認証サービス/認可サービス/プリンシパル名のタプルのリスト、および認証レベルのパラメーターが関連します。 暗黙的か明示的かに関係なく、CoInitializeSecurity に対するサーバーの呼び出しによって、サーバーのセキュリティ ブランケットが決まります。これはメイン固定されています。

アプリケーションがクライアントとして動作している場合、CoInitializeSecurity に渡される値は、認証レベル、偽装レベル、認証 ID、および機能に関連します。 CoInitializeSecurity に対するクライアントの暗黙的または明示的な呼び出しは、クライアントが必要とするセキュリティ ブランケットを示します。

プロキシが作成されると、COM はサーバーのセキュリティ ブランケットとクライアントのセキュリティ ブランケットによって指定された値を使用して、プロキシに適切な既定のセキュリティ ブランケットをネゴシエートします。 COM は、クライアントとサーバーの両方で動作する認証サービスを選択します。 認証サービスを操作するために、承認サービスとプリンシパル名が選択されます。 認証レベルについては、COM はクライアントとサーバーによって指定された認証レベルの高い方を選択します。 COM によって選択される偽装レベルと機能は、クライアントによって指定されたものです。 認証 ID は、選択した認証サービスに対してクライアントによって指定されたものです。

既定のセキュリティ ブランケットが計算されると、その値が新しく作成されたプロキシに割り当てられます。 クライアントは、IClientSecurity::SetBlanket を呼び出すことによって、プロキシのセキュリティ設定をオーバーライドできます。 SetBlanket に指定された値はネゴシエートされません。単に指定されたプロキシに割り当てられます。 ただし、既定のパラメーター (RPC_C_IMP_LEVEL_DEFAULT など) が SetBlanket に渡される場合、COM は、前に説明したセキュリティ ブランケット ネゴシエーション アルゴリズムを使用して既定のパラメーターを計算します。

COM でのセキュリティ