Houve um problema com os principais. Eu recriei o /etc/httpd/httpd.keytab e adicionei o principial HTTP corretamente e tudo funciona bem!
Eu quero usar o Kerberos e o Apache 2 no linux com mod_auth_kerb.
Eu adicionei o .htaccess ao meu projeto com o seguinte:
#SSLRequireSSL
AuthType Kerberos
AuthName "Kerberos Login"
KrbMethodNegotiate On
KrbMethodK5Passwd Off
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/httpd/httpd.keytab
KrbLocalUserMapping On
require valid-user
Quando tentei testar meu logon único no IE ou no Firefox, recebi o seguinte erro no log do apache:
[Thu Jan 19 21:03:27 2012] [error] [client 10.65.0.1] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)
Eu não sei o que é e o que devo fazer para que isso funcione.
Meu objetivo é fazer com que REMOTE_USER seja preenchido pelo nome de usuário do AD. Mas agora eu não posso fazer nada por causa desse erro ...
Eu descobri outro motivo para esse erro:
O Windows tenta autenticar com o NTLM. Na verdade, essa é a raiz do problema.
Eu não entendo como recriar o keytab ajudou, o erro seria algo como "Entrada de tabela de chaves não encontrada".
Windows tenta autenticar via NTLM quando não é possível adquirir um ticket do KDC.
Para mim, a razão para isso era que meu servidor não estava localizado no mesmo domínio.
O domínio era ad.domain.com
, mas meu servidor estava localizado em something.domain.com
.
Tenho certeza que você pode permitir isso de alguma forma também, mas a solução fácil é simplesmente alterar o nome do host apontando para o servidor (e, em seguida, criando um novo keytab para esse domínio).
Em uma configuração simples, usando mod_auth_gssapi e FreeIPA como o servidor krb5 e para gerar keytabs, descobri que adicionar o seguinte ao lado do comando AuthType
solucionou o problema.
BrowserMatch Windows gssapi-no-negotiate
Com base na resposta do andsens, parece que isso está acontecendo em clientes Windows que tentam usar o NTLM. GssapiAllowedMech krb5
e GssapiBasicAuthMech krb5
não dão um resultado bem-sucedido à negociação, então a única solução parece ser desabilitar a negociação. Não posso garantir que isso seja preciso, mas funcionou para mim.
A documentação correspondente é aqui