Négociation de couverture de sécurité

Une couverture de sécurité est un groupe de valeurs qui décrivent les paramètres de sécurité qui s’appliquent à tous les proxys d’un processus ou uniquement à un proxy d’interface particulier. Une couverture de sécurité comprend les valeurs suivantes :

  • Service d’authentification
  • Service d’autorisation
  • Nom principal
  • Niveau d’authentification
  • Niveau d'emprunt d'identité
  • Identité d’authentification
  • Fonctionnalités
  • Une liste de contrôle d’accès (ACL) (serveurs uniquement)

La négociation globale de sécurité est le processus utilisé par COM pour choisir les paramètres de sécurité d’un proxy lors de sa création. Ce processus consiste à comparer la couverture de sécurité du serveur avec la couverture de sécurité du client et à utiliser ces valeurs pour créer une couverture de sécurité par défaut appropriée pour le proxy. Les paragraphes suivants expliquent d’où proviennent les couvertures de sécurité du client et du serveur et décrivent comment COM négocie la couverture de sécurité pour le proxy à l’aide des couvertures de sécurité du client et du serveur.

Le client et le serveur peuvent chacun appeler CoInitializeSecurity pour spécifier leurs couvertures de sécurité respectives. Si une application n’appelle pas Explicitement CoInitializeSecurity , COM l’appelle implicitement pour l’application, en utilisant les valeurs par défaut appropriées. Pour plus d’informations sur ces valeurs par défaut, consultez Valeurs par défaut de sécurité COM.

Certains paramètres de CoInitializeSecurity s’appliquent lorsque l’application est un serveur, et d’autres s’appliquent lorsque l’application est un client. Lorsque l’application agit en tant que serveur, ces paramètres sont pertinents : une liste de contrôle d’accès, une liste de tuples de service d’authentification/service d’autorisation/nom de principal et un niveau d’authentification. L’appel d’un serveur à CoInitializeSecurity, qu’il soit implicite ou explicite, détermine la couverture de sécurité du serveur, qui reste fixe.

Lorsque l’application agit en tant que client, les valeurs suivantes passées à CoInitializeSecurity sont pertinentes : un niveau d’authentification, un niveau d’emprunt d’identité, l’identité d’authentification et les fonctionnalités. L’appel implicite ou explicite d’un client à CoInitializeSecurity indique la couverture de sécurité souhaitée par le client.

Lorsqu’un proxy est créé, COM utilise les valeurs spécifiées par la couverture de sécurité du serveur et la couverture de sécurité du client pour négocier une couverture de sécurité par défaut appropriée pour le proxy. COM sélectionne un service d’authentification qui fonctionne à la fois sur le client et le serveur. Le service d’autorisation et le nom du principal sont choisis pour fonctionner avec le service d’authentification. Pour le niveau d’authentification, COM choisit le niveau d’authentification le plus élevé spécifié par le client et le serveur. Le niveau d’emprunt d’identité et les fonctionnalités choisies par COM sont ceux spécifiés par le client. L’identité d’authentification est celle spécifiée par le client pour le service d’authentification choisi.

Une fois la couverture de sécurité par défaut calculée, ses valeurs sont affectées au proxy nouvellement créé. Le client peut remplacer les paramètres de sécurité du proxy en appelant IClientSecurity::SetBlanket. Les valeurs spécifiées sur SetBlanket ne sont pas négociées ; ils sont simplement affectés au proxy spécifié. Toutefois, si des paramètres par défaut (tels que RPC_C_IMP_LEVEL_DEFAULT) sont passés à SetBlanket, COM utilise l’algorithme de négociation de couverture de sécurité décrit précédemment pour calculer les paramètres par défaut.

Sécurité dans COM