Compartilhar via


Nomes de entidade de segurança

Para um cliente criar uma sessão mutuamente autenticada com um programa de servidor, ele deve fornecer o nome de entidade de segurança esperado do servidor. Alguns protocolos, como Kerberos, exigem um nome de entidade de segurança do servidor correto para qualquer sessão autenticada. Uma entidade é uma entidade que o sistema de segurança reconhece. Isso inclui usuários humanos, bem como serviços do sistema. Todos os nomes de entidades de segurança têm formato semelhante para um determinado provedor de suporte de segurança (SSP). Um SSP é um módulo de software que executa a validação de segurança. Para obter mais informações, consulte visão geral da arquitetura SSPI. Para manter a uniformidade, um provedor de segurança geralmente fornece nomes semelhantes aos dos serviços do sistema como usuários. Em alguns provedores de segurança, os serviços do sistema podem não ter um nome principal.

O servidor registra seu nome principal para o provedor de segurança usando a função RpcServerRegisterAuthInfo. Somente um nome de entidade de segurança do servidor pode ser usado para cada provedor de segurança. Se mais de um nome for registrado, um nome será escolhido e usado aleatoriamente. O SSP determina o formato do nome principal. Por exemplo, os SSPs Kerberos/Negotiate para um serviço de sistema se parecem aproximadamente com o seguinte: machine_name$@childdomain.parentdomain1.parentdomain2.COM.

O procedimento recomendado para gerar nomes de entidade de segurança é usar APIs documentadas (como a função DsMakeSpn), em vez de reunir o nome principal de cadeias de caracteres. O uso de APIs documentadas aumenta a portabilidade entre diferentes ambientes de implantação e elimina a possibilidade de erros.

Especificar um nome de entidade de segurança incorreto pode impedir que o cliente e o servidor estabeleçam uma sessão autenticada. O SSP do SCHANNEL usa nomes principais em qualquer uma das duas formas:

  • O primeiro formulário de nome da entidade de segurança SCHANNEL é o formulário demsstd do. Os nomes no formulário msstd geralmente seguem o msstd padrão:servername@serverdomain.com. Isso é conhecido como uma propriedade de nome de email. Se o certificado contiver uma propriedade de nome de email e contiver o sinal (@), o nome da entidade de segurança será msstd:email name. Caso contrário, ele deve conter a propriedade de nome comum. As barras invertidas internas são dobradas, assim como nas associações de cadeia de caracteres.
  • O segundo formulário de nome da entidade de segurança SCHANNEL é o formulário decompleto. Esta é uma série de nomes em conformidade com RFC1779 delimitados por colchetes angulares e separados por cílios invertidos. Normalmente, ele segue o padrão fullsic:\<\Authority\SubAuthority\.....\Person> ou fullsic:\<\Authority\SubAuthority\.....\ServerProgram>.

Se o nome não corresponder ao certificado, ERROR_ACCESS_DENIED será retornado. Se o formato de nome for inválido, o SSP do SCHANNEL retornará o código ERROR_INVALID_PARAMETER.

Para consultar o nome principal do servidor, os aplicativos podem chamar RpcMgmtInqServerPrincName. Isso aloca uma cadeia de caracteres terminada em nulo para manter o nome principal. Antes de terminar, seu aplicativo deve invocar RpcStringFree para liberar a memória que essa cadeia de caracteres ocupa.

A consulta para o nome do servidor dessa maneira não é segura e deve ser evitada. Para autenticação de servidor, o programa cliente deve saber a qual servidor ele está se conectando e deve criar o nome da entidade de segurança do servidor do zero.