Condividi tramite


Nomi delle entità

Affinché un client crei una sessione autenticata a vicenda con un programma server, deve fornire il nome dell'entità di sicurezza prevista del server. Alcuni protocolli, ad esempio Kerberos, richiedono un nome di entità server corretto per qualsiasi sessione autenticata. Un'entità è un'entità riconosciuta dal sistema di sicurezza. Sono inclusi gli utenti umani e i servizi di sistema. Tutti i nomi delle entità hanno un formato simile per un determinato provider di supporto per la sicurezza. Un provider di servizi condivisi è un modulo software che esegue la convalida della sicurezza. Per altre informazioni, vedere Panoramica dell'architettura SSPI. Per mantenere l'uniformità, un provider di sicurezza fornisce in genere nomi simili ai servizi di sistema come gli utenti. In alcuni provider di sicurezza, i servizi di sistema potrebbero non avere un nome di entità.

Il server registra il nome dell'entità per il provider di sicurezza usando la funzione RpcServerRegisterAuthInfo . È possibile usare un solo nome di entità server per ogni provider di sicurezza. Se vengono registrati più nomi, viene scelto e usato in modo casuale un nome. Il provider di servizi condivisi determina il formato del nome dell'entità. Ad esempio, i provider di servizi di configurazione Kerberos/Negotiate per un servizio di sistema sono simili ai seguenti: machine_name$@childdomain.parentdomain1.parentdomain2.COM.

La procedura consigliata per la generazione di nomi di entità consiste nell'usare LE API documentate (ad esempio la funzione DsMakeSpn ), anziché creare una torta tra il nome dell'entità dalle stringhe. L'uso delle API documentate aumenta la portabilità tra ambienti di distribuzione diversi ed elimina la possibilità di errori.

Se si specifica un nome di entità non corretto, è possibile impedire al client e al server di stabilire una sessione autenticata. Il provider di servizi condivisi SCHANNEL accetta i nomi delle entità in una delle due forme seguenti:

  • Il primo modulo del nome dell'entità SCHANNEL è il modulo msstd . I nomi nel formato msstd seguono in genere il modello msstd:servername@serverdomain.com. Questa proprietà viene definita proprietà del nome di posta elettronica. Se il certificato contiene una proprietà del nome di posta elettronica e contiene il simbolo at (@), il nome dell'entità è msstd:email name. In caso contrario, deve contenere la proprietà common name. Le barre rovesciate interne vengono raddoppiate, esattamente come nelle associazioni di stringa.
  • Il secondo modulo del nome dell'entità SCHANNEL è il formato completo . Si tratta di una serie di nomi conformi a RFC1779 delimitati da parentesi angolari e separati da barre rovesciate. Segue in genere il modello fullsic:\\<Authority\SubAuthority\.....\Person> o fullsic:\<\Authority\SubAuthority\.....\ServerProgram>.

Se il nome non corrisponde al certificato, viene restituito ERROR_ACCESS_DENIED. Se il formato del nome non è valido, SSP SCHANNEL restituisce il codice ERROR_INVALID_PARAMETER.

Per eseguire una query sul nome dell'entità del server, le applicazioni possono chiamare RpcMgmtInqServerPrincName. Alloca una stringa con terminazione Null per contenere il nome dell'entità. Prima di terminare, l'applicazione deve richiamare RpcStringFree per rilasciare la memoria occupata da questa stringa.

L'esecuzione di query per il nome del server in questo modo non è sicura e deve essere evitata. Per l'autenticazione server, il programma client deve conoscere il server a cui si connette e deve creare il nome dell'entità server da zero.