Vários servidores da web autenticados pelo SPNEGO em um nome de host

4

Eu estava tentando configurar um serviço Java usando o filtro de servlet SPNEGO e uma porta de escuta 8080 para autenticação em um host que também está executando aplicativos da Web hospedados no IIS7.

Eu segui as instruções de instalação do SPNEGO e criei um SPN para HTTP/canonical.host.name , vinculado ao usuário que executa a autenticação para o serviço Java.

Após essa alteração, o serviço Java pode autenticar clientes via SPNEGO, mas os pools de aplicativos IIS7 em execução com identidades personalizadas (ou seja, nomes de usuário em vez de ApplicationPoolIdentity) são repentinamente incapazes de autenticar.

O que eu não entendo aqui:

  • Como a autenticação Kerberos funciona para o IIS quando não há nenhum SPN para HTTP/canonical.host.name definido usando (conforme marcado por setspn -Q )? Os clientes ainda solicitam e recebem tickets exatamente para este SPN.
  • Por falta de interesse, tentamos executar os pools de aplicativos com a identidade do serviço Java que autentica com êxito. Ele ainda não funcionou enquanto o SPN foi definido - tentativas de autenticação com um ticket do Kerberos falharam com um KRB_AP_ERR_MODIFIED retornado. A execução do pool de aplicativos como o usuário ao qual o SPN foi registrado não alterou esse comportamento.
  • Microsoft especifica SPNs para incluir um número da porta, mas o IE não está de acordo com isso e nunca envia um número de porta no SPN (Firefox e Chrome seguem neste comportamento).

Portanto, existe alguma maneira de ter múltiplos serviços autenticados independentes do SPNEGO no mesmo host?

    
por themel 10.11.2011 / 16:20

2 respostas

2

Último primeiro: Para vários serviços autenticados pelo SPNEGO no mesmo host, sem mexer nas chaves de registro do IE, use nomes diferentes.

•How does Kerberos authentication work for IIS when there is no SPN for HTTP/canonical.host.name defined using (as checked via setspn -Q)? Clients still request and receive tickets for exactly this SPN.

Este é um fallback automático com base no HOST\boxname SPN, que é criado para todos os computadores no momento da associação do domínio - se o DC não encontrar uma correspondência para SPECIFICSERVICE \ boxname, conforme solicitado pelo aplicativo cliente, ele será fornecer um ticket com base no HOST \ boxname.

Use SETSPN -L boxname para listar os SPNs associados a uma entidade de segurança (conta de usuário ou computador).

•Out of interest, we tried running the application pools with the identity of the Java service that successfully authenticates. It still did not work as long as the SPN was defined - attempts to authenticate with a Kerberos ticket failed with a KRB_AP_ERR_MODIFIED returned. Running the application pool as the user that the SPN was registered to did not change this behaviour.

O padrão para o IIS 7 é com useAppPoolCredentials = false e useKernelMode = true; um ou ambos têm que ser alternados para que a identidade do pool de aplicativos seja usada para decodificar tíquetes kerberos.

•Microsoft specifies SPNs to include a port number, but IE does not conform to this and never sends a port number in the SPN (Firefox and Chrome follow in this behaviour).

E voltando ao ponto crucial: quando tudo estiver corrigido, o IE e outros ainda não incluirão números de porta por padrão, então a solução de menor modificação é simplesmente executar cabeçalhos de host diferentes na mesma caixa. .

Note também que, devido a outro comportamento do IE (com o mesmo argumento contra a alteração das configurações de registro de todos os seus clientes), os CNAMEs não são uma boa escolha, use os registros A.

Mais aqui e aqui e em menor grau, aqui .

    
por 10.11.2011 / 22:46
1

Você tem as chaves de registro deste link do KB configurado no cliente? Caso contrário, o IE não solicitará o ticket correto. Só para esclarecer, as chaves reg vieram com o hotfix IE6 +, mas se aplicam a todas as versões do IE desde então.

Não sei se entendi sua configuração. O SPN HTTP / canonical.host.name está configurado na conta de serviço usada para o "serviço Java"?

Você pode ter vários serviços em execução na caixa usando identidades diferentes. Portanto, você pode ter um serviço chamado HTTP / host1.host.name e HTTP / host2.host.name no mesmo host. Você pode registrar os SPNs envolvidos na mesma conta de serviço ou em diferentes contas de serviço, se desejar.

Solicitações para HTTP SPN são mapeadas para objetos com o SPN baseado em HOST se o HTTP SPN não for explicitamente definido em lugar algum. Esse mapeamento acontece pelo atributo SPNMappings em um objeto que se parece com CN = Serviço de Diretório, CN = Windows NT, CN = Serviços, CN = Configuração, DC = forest1, DC = local (forest1.local é o nome da floresta aqui) como por < href="http://msdn.microsoft.com/pt-br/library/cc220898(v=PROT.13).aspx"> link .

Os blogs de Tristan são ótimos. Você também pode encontrar os blogs de solução de problemas e outros blogs relacionados ao kerberos no link útil.

    
por 10.11.2011 / 20:27