A autenticação do Apache contra o LDAP falha por senhas com umlauts

7

Ao autenticar-se contra o LDAP (Active Directory, Server 2008) de um servidor Apache, recebo a seguinte mensagem no log de erros:

authentication failure for "/": Password Mismatch

Isso só acontece quando a senha contém umlauts alemão (ä, ö, ü). Depois de alterar a senha ou tentar com uma conta diferente sem umlauts em sua senha, a autenticação funciona bem.

Aqui está minha configuração:

AuthType Basic
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://[SERVER]:3268/DC=[DOMAIN]?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN       "user"
AuthLDAPBindPassword "pass"
require valid-user

Eu uso o Apache2 (2.2.16-6 + squeeze1) no Debian (2.6.26-2-686). O engraçado é que a configuração acima funcionou até ontem (mesmo para senhas com umlauts) e eu não toquei nela (eu juro ;-)). Eu já encontrei outras pessoas com o mesmo problema mas sem solução.

Alguém tem uma ideia de como resolver o problema ou simplesmente o que fazer a seguir para, talvez, identificar o módulo errado?

Atenciosamente, Stefan

    
por StefanMacke 23.08.2011 / 16:32

1 resposta

3

Parece que há um problema de codificação acontecendo em algum lugar. Eu não posso te dizer onde está, mas posso sugerir como encontrá-lo.

Pelo que entendi, existem 5 locais onde a codificação pode estar sendo manipulada ou interpretada incorretamente. Estes são:

  1. Navegando transformando caracteres em bytes para enviar para o servidor da web
  2. Apache compreendendo esses bytes para construir a string de senha
  3. Apache + OpenLDAP transformando a string de senha em bytes para enviar para o servidor LDAP
  4. O Active Directory transforma os bytes na solicitação de ligação LDAP em algo que pode ser comparado ao seu banco de dados de senhas
  5. O Active Directory transforma caracteres em bytes ao definir a senha do usuário

Supondo que você pode fazer login no Windows como usuário, sabemos que o item 5 não é problema seu. O que você precisa fazer é identificar onde o seu problema vem. Meu palpite é que está nos passos 2 ou 3, mas não tenho certeza.

Primeiro, verifique se você não está usando https para conversar com o servidor da Web e não está usando ldaps para conversar com o servidor LDAP. (Você pode não querer isso para produção, mas facilita a vida). Agora, use wireshark para farejar o tráfego para as duas pernas, navegador - > Apache e Apache - > DE ANÚNCIOS. Você vê as informações corretas lá?

Em seguida, defina o nível de log no Apache para depurar e veja o que está impresso lá fora. Isso não mostrará a senha, mas, no nível de depuração, ela deverá mostrar outras informações, como o nome de usuário. Se você usa um nome de usuário falso contendo sotaques, eles aparecem corretamente?

Depois de identificar a etapa que está quebrando a codificação, você tem cerca de 90% do caminho para saber como corrigi-la!

    
por 28.08.2011 / 22:32