Negociação de Cobertores de Segurança

Um cobertor de segurança é um grupo de valores que descrevem as configurações de segurança que se aplicam a todos os proxies em um processo ou apenas a um proxy de interface específico. Uma manta de segurança compreende os seguintes valores:

  • Serviço de autenticação
  • Serviço de autorização
  • Nome de entidade
  • Nível de autenticação
  • Nível de representação
  • Identidade de autenticação
  • Funcionalidades
  • Uma lista de controle de acesso (ACL) (somente servidores)

A negociação de cobertor de segurança é o processo que o COM usa para escolher as configurações de segurança para um proxy quando ele é criado. Esse processo envolve comparar a manta de segurança do servidor com a cobertura de segurança do cliente e usar esses valores para criar uma cobertura de segurança padrão apropriada para o proxy. Os parágrafos a seguir explicam de onde vêm as mantas de segurança do cliente e do servidor e descrevem como a COM negocia a manta de segurança para o proxy usando as mantas de segurança do cliente e do servidor.

O cliente e o servidor podem chamar CoInitializeSecurity para especificar seus respectivos cobertores de segurança. Se um aplicativo não chamar CoInitializeSecurity explicitamente, COM o chamará implicitamente para o aplicativo, usando valores padrão apropriados. Para obter mais informações sobre esses valores padrão, consulte Padrões de segurança COM.

Alguns parâmetros para CoInitializeSecurity se aplicam quando o aplicativo é um servidor e alguns se aplicam quando o aplicativo é um cliente. Quando o aplicativo está agindo como um servidor, esses parâmetros são relevantes: uma ACL, uma lista de tuplas de serviço de autenticação/serviço de autorização/nome principal e um nível de autenticação. A chamada de um servidor para CoInitializeSecurity, implícita ou explícita, determina o cobertor de segurança do servidor, que permanece fixo.

Quando o aplicativo está agindo como um cliente, os seguintes valores passados para CoInitializeSecurity são relevantes: um nível de autenticação, um nível de representação, a identidade de autenticação e recursos. A chamada implícita ou explícita de um cliente para CoInitializeSecurity indica o cobertor de segurança desejado pelo cliente.

Quando um proxy é criado, COM usa os valores especificados pelo cobertor de segurança do servidor e pelo cobertor de segurança do cliente para negociar um cobertor de segurança padrão apropriado para o proxy. COM escolhe um serviço de autenticação que funciona no cliente e no servidor. O serviço de autorização e o nome principal são escolhidos para trabalhar com o serviço de autenticação. Para o nível de autenticação, COM escolhe o mais alto dos níveis de autenticação especificados pelo cliente e pelo servidor. O nível de representação e os recursos escolhidos pelo COM são os especificados pelo cliente. A identidade de autenticação é aquela especificada pelo cliente para o serviço de autenticação escolhido.

Depois que o cobertor de segurança padrão tiver sido computado, seus valores serão atribuídos ao proxy recém-criado. O cliente pode substituir as configurações de segurança para o proxy chamando IClientSecurity::SetBlanket. Os valores especificados para SetBlanket não são negociados, eles são simplesmente atribuídos ao proxy especificado. No entanto, se os parâmetros padrão (como RPC_C_IMP_LEVEL_DEFAULT) forem passados para SetBlanket, o COM usará o algoritmo de negociação de cobertor de segurança descrito anteriormente para calcular os parâmetros padrão.

Segurança em COM