Partilhar via


Principais Nomes

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 servidor correto para qualquer sessão autenticada. Um comitente é uma entidade que o sistema de segurança reconhece. Isso inclui usuários humanos, bem como serviços do sistema. Todos os nomes principais 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 dá 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çãoRpcServerRegisterAuthInfo. Apenas um nome de entidade de servidor pode ser usado para cada provedor de segurança. Se mais de um nome for registrado, um nome será escolhido aleatoriamente e usado. O SSP dita o formato do nome principal. Por exemplo, os SSPs Kerberos/Negotiate para um serviço do sistema têm aproximadamente a seguinte aparência: machine_name$@childdomain.parentdomain1.parentdomain2.COM.

O procedimento recomendado para gerar nomes principais é usar APIs documentadas (como a função DsMakeSpn), em vez de agrupar o nome principal a partir 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 principal incorreto pode impedir que o cliente e o servidor estabeleçam uma sessão autenticada. O SSP SCHANNEL assume nomes principais em qualquer uma das duas formas:

  • O primeiro formulário de nome principal SCHANNEL é o formulário msstd. Os nomes na forma msstd geralmente seguem o padrão msstd:servername@serverdomain.com. Isso é conhecido como uma propriedade de nome de e-mail. Se o certificado contiver uma propriedade de nome de e-mail e contiver o sinal de arroba (@), o nome principal será msstd:email name. Caso contrário, deve conter a propriedade common name. As barras invertidas internas são dobradas, assim como nas ligações de cordas.
  • O segundo formulário de nome principal SCHANNEL é o formulário de completo. Esta é uma série de nomes compatíveis com RFC1779 delimitados por colchetes angulares e separados por barras invertidas. Normalmente 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, SCHANNEL SSP 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.

Consultar o nome do servidor dessa maneira não é seguro e deve ser evitado. Para autenticação de servidor, o programa cliente deve saber a qual servidor está se conectando e deve criar o nome principal do servidor a partir do zero.