安全毯式协商

安全毯是一组值,用于描述应用于进程中所有代理或仅应用于特定接口代理的安全设置。 安全毯包括以下值:

  • 身份验证服务
  • 授权服务
  • 主体名称
  • 身份验证级别
  • 模拟级别
  • 身份验证标识
  • 功能
  • 访问控制列表 (ACL) (仅限服务器)

安全毯式协商是 COM 在创建代理时用于选择代理的安全设置的过程。 此过程涉及将服务器的安全毯与客户端的安全毯进行比较,并使用这些值为代理创建适当的默认安全毯。 以下段落说明客户端和服务器的安全毯来自何处,并介绍 COM 如何使用客户端和服务器的安全毯式协商代理的安全毯。

客户端和服务器可以分别调用 CoInitializeSecurity 来指定其各自的安全毯。 如果应用程序未显式调用 CoInitializeSecurity,COM 将使用适当的默认值为应用程序隐式调用。 有关这些默认值的详细信息,请参阅 COM 安全默认值

CoInitializeSecurity 的某些参数在应用程序是服务器时适用,有些参数在应用程序是客户端时应用。 当应用程序充当服务器时,这些参数相关:ACL、身份验证服务/授权服务/主体名称元组列表和身份验证级别。 服务器对 CoInitializeSecurity 的调用(无论是隐式还是显式)决定服务器的安全毯,并固定不变。

当应用程序充当客户端时,传递给 CoInitializeSecurity 的以下值相关:身份验证级别、模拟级别、身份验证标识和功能。 客户端对 CoInitializeSecurity 的隐式或显式调用表示客户端想要的安全毯。

创建代理时,COM 使用服务器的安全毯和客户端的安全毯指定的值来协商适合代理的默认安全毯。 COM 选取一个在客户端和服务器上工作的身份验证服务。 选择授权服务和主体名称来处理身份验证服务。 对于身份验证级别,COM 选择客户端和服务器指定的较高身份验证级别。 COM 选择的模拟级别和功能由客户端指定。 身份验证标识是客户端为所选身份验证服务指定的标识。

计算默认安全毯后,其值将分配给新创建的代理。 客户端可以通过调用 IClientSecurity::SetBlanket 来替代代理的安全设置。 未协商 SetBlanket 的指定值;它们只分配给指定代理。 但是,如果将默认参数(如 RPC_C_IMP_LEVEL_DEFAULT)传递给 SetBlanket,COM 将使用前面描述的安全毯式协商算法来计算默认参数。

COM 中的安全性