Nomes de entidade de segurança

Para que um cliente crie uma sessão mutuamente autenticada com um programa de servidor, ele deve fornecer o nome principal 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 entidade 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 de SSPI. Para manter a uniformidade, um provedor de segurança geralmente fornece aos serviços do sistema nomes semelhantes aos dos 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 do sistema são aproximadamente semelhantes aos seguintes: 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 de entidade de segurança em uma das duas formas:

  • O primeiro formulário de nome de entidade de segurança do SCHANNEL é o formulário msstd . Os nomes no formulário msstd geralmente seguem o padrão msstd: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 de at (@), o nome da entidade de segurança será msstd:email name. Caso contrário, ele deverá conter a propriedade de nome comum. As barras invertidas internas são duplicadas, assim como nas associações de cadeia de caracteres.
  • O segundo formulário de nome de entidade de segurança do SCHANNEL é o formulário completo . Esta é uma série de nomes compatíveis com RFC1779 limitados por colchetes angulares e separados por barras invertidas. 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 da entidade de segurança. Antes de terminar, seu aplicativo deve invocar RpcStringFree para liberar a memória que essa cadeia de caracteres ocupa.

A consulta do 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.