Negoziazione coperta di sicurezza

Una coperta di sicurezza è un gruppo di valori che descrivono le impostazioni di sicurezza applicabili a tutti i proxy in un processo o solo a un proxy di interfaccia specifico. Una coperta di sicurezza comprende i valori seguenti:

  • Servizio di autenticazione
  • Servizio di autorizzazione
  • Nome dell'entità
  • Livello di autenticazione
  • Livello di rappresentazione
  • Identità di autenticazione
  • Funzionalità
  • Elenco di controllo di accesso (solo server)

La negoziazione coperta di sicurezza è il processo usato da COM per scegliere le impostazioni di sicurezza per un proxy al momento della creazione. Questo processo comporta il confronto della coperta di sicurezza del server con la coperta di sicurezza del client e l'uso di tali valori per creare una coperta di sicurezza predefinita appropriata per il proxy. I paragrafi seguenti spiegano da dove provengono le coperte di sicurezza del client e del server e descrivono come COM negozia la coperta di sicurezza per il proxy usando le coperte di sicurezza del client e del server.

Il client e il server possono ogni chiamata a CoInitializeSecurity per specificare le rispettive coperte di sicurezza. Se un'applicazione non chiama in modo esplicito CoInitializeSecurity , COM la chiama in modo implicito per l'applicazione, usando i valori predefiniti appropriati. Per altre informazioni su questi valori predefiniti, vedere Impostazioni predefinite per la sicurezza COM.

Alcuni parametri di CoInitializeSecurity si applicano quando l'applicazione è un server e alcune si applicano quando l'applicazione è un client. Quando l'applicazione funge da server, questi parametri sono rilevanti: un elenco di ACL, un elenco di tuple di nome servizio/autorizzazione/servizio di autorizzazione e un livello di autenticazione. La chiamata di un server a CoInitializeSecurity, implicita o esplicita, determina la coperta di sicurezza del server, che rimane fissa.

Quando l'applicazione funge da client, i valori seguenti passati a CoInitializeSecurity sono rilevanti: un livello di autenticazione, un livello di rappresentazione, l'identità di autenticazione e le funzionalità. Una chiamata implicita o esplicita di un client a CoInitializeSecurity indica la coperta di sicurezza desiderata dal client.

Quando viene creato un proxy, COM usa i valori specificati dalla coperta di sicurezza del server e dalla coperta di sicurezza del client per negoziare una coperta di sicurezza predefinita appropriata per il proxy. COM seleziona un servizio di autenticazione che funziona sia sul client che sul server. Il servizio di autorizzazione e il nome dell'entità vengono scelti per lavorare con il servizio di autenticazione. Per il livello di autenticazione, COM sceglie i livelli di autenticazione più elevati specificati dal client e dal server. Il livello di rappresentazione e le funzionalità scelte da COM sono quelli specificati dal client. L'identità di autenticazione è quella specificata dal client per il servizio di autenticazione scelto.

Una volta calcolata la coperta di sicurezza predefinita, i relativi valori vengono assegnati al proxy appena creato. Il client può eseguire l'override delle impostazioni di sicurezza per il proxy chiamando IClientSecurity::SetBlanket. I valori specificati per SetBlanket non vengono negoziati, ma vengono semplicemente assegnati al proxy specificato. Tuttavia, se i parametri predefiniti (ad esempio RPC_C_IMP_LEVEL_DEFAULT) vengono passati a SetBlanket, COM usa l'algoritmo di negoziazione coperta di sicurezza descritto in precedenza per calcolare i parametri predefiniti.

Sicurezza in COM