Condividi tramite


Scelta delle opzioni QOS di sicurezza

Le opzioni QOS di sicurezza vengono passate come parte del parametro SecurityQOS assegnato alla funzione RpcBindingSetAuthInfoEx . Usare le procedure consigliate seguenti.

Usare l'autenticazione reciproca

L'autenticazione reciproca true è disponibile solo per determinati provider di sicurezza: Negotiate (quando negozia Kerberos), Kerberos e Schannel. NTLM non supporta l'autenticazione reciproca. L'uso dell'autenticazione reciproca richiede che venga fornito un nome di entità server ben formato. Molti sviluppatori usano la procedura di sicurezza difettosa seguente: il server viene chiamato per richiedere il nome dell'entità (RpcMgmtInqServerPrincName) e quindi richiede in modo cieco l'autenticazione reciproca usando il nome dell'entità. Questo approccio interrompe l'intera idea dell'autenticazione reciproca; l'idea dell'autenticazione reciproca è che vengono chiamati solo determinati server perché sono attendibili per analizzare e gestire i dati. Usando la procedura di sicurezza difettosa appena descritta, gli sviluppatori forniscono i propri dati a chiunque sia abbastanza intelligente da restituire il proprio nome.

Ad esempio, se il software client deve chiamare solo un server in esecuzione in account Joe, Pete o Alice, è necessario chiamare la funzione RpcMgmtInqServerPrincName e il nome restituito deve essere controllato. Se si tratta di Joe, Pete o Alice, è necessario richiedere l'autenticazione reciproca usando il nome dell'entità server. In questo modo entrambe le metà della conversazione passano alla stessa entità.

Se il software client deve chiamare un servizio in esecuzione solo con l'account di Joe, comporre direttamente il nome dell'entità server di Joe ed effettuare la chiamata. Se il server non è Joe, la chiamata avrà semplicemente esito negativo.

Molte volte, i servizi vengono eseguiti come servizi di sistema Windows, il che significa che vengono eseguiti con l'account del computer. È comunque consigliabile eseguire l'autenticazione reciproca e la creazione di un nome di entità server.

Usare il valore impersonationType più basso che consente alla chiamata di passare

Questa procedura consigliata è piuttosto autoesplicativa. Anche se viene usata l'autenticazione reciproca, non concedere al server più diritti del necessario; un server legittimo potrebbe essere stato compromesso e, anche se i dati inviati rientrano nelle mani sbagliate in questi casi, almeno il server non sarà in grado di accedere ad altri dati sulla rete per conto dell'utente. Alcuni server rifiuteranno una chiamata che non dispone di informazioni sufficienti per determinare e possibilmente rappresentare il chiamante. Tenere inoltre presente che alcune sequenze di protocollo supportano la sicurezza a livello di trasporto (ncacn_np e ncalrpc). In questi casi, il server può sempre rappresentare se si specifica un livello di rappresentazione sufficientemente elevato tramite il parametro NetworkOptions quando si crea l'handle di associazione.

Infine, alcuni provider o trasporti di sicurezza possono urtare in modo trasparente ImpersonationType a un livello superiore a quello specificato. Quando si sviluppa un programma, assicurarsi di provare a effettuare chiamate con l'impersonationType desiderato e verificare se si ottiene un valore ImpersonationType superiore nel server.