Active Directory: o preenchimento automático do LDAP do Thunderbird não funciona com a autenticação Kerberos

2

O problema:

Estou tentando configurar um autocompletar de correio LDAP - uma funcionalidade integrada do Mozilla Thunderbird 17.0.5 @ Windows 7 x64 no ambiente de domínio 2008R2. O sistema operacional é uma instalação nova e pronta para uso no VBox. Parece que não consigo trabalhar com a autenticação Kerberos (SSPI nativo).

Configurei os parâmetros LDAP corretamente - consegui verificar que usando o modo de autenticação "simples" no Thunderbird (no qual o aplicativo solicita que o usuário insira manualmente as credenciais de domínio). Nesse modo, o preenchimento automático de TB funciona.

No entanto, sempre que alterno para a autenticação Kerberos, não obtenho resultados de autocompletar. VBox mostra alguma atividade de rede após cada letra que eu digito no campo de endereço, mas nenhum resultado é retornado.

Isso funciona da mesma forma nas contas de usuário padrão e nas contas de administrador de domínio.

A pergunta:

Tanto quanto eu posso ver, pode ser algum problema do Thunderbird ou um problema de domínio / kerberos.

Baseando-se nos resultados do google, essa funcionalidade do Thunderbird não é muito popular, mas a maior parte do que eu li parece garantir que isso funcione em qualquer ambiente de domínio configurado padrão. Como os controladores de domínio foram configurados pelo ex-funcionário, é possível que algum recurso do domínio tenha sido reconfigurado ou desativado. Eu nunca toquei no Kerberos embutido.

Alguém pode me aconselhar, o que devo procurar?

A depuração:

Eu tentei depurar o cliente Thunderbird e recebi um log que estou postando na parte inferior. O log não mostra nenhum erro, e embora eu não saiba quase nada sobre o funcionamento interno do Kerberos, como eu entendo, o cliente está tentando autenticar ( InitializeSecurityContext: succeeded ) mas nunca parece receber nenhuma resposta. No entanto, a TB não retorna nenhum erro.

Além disso, parece que o log é praticamente o mesmo, independentemente de eu configurar um nome correto de Bind DN ( [email protected] é o correto) ou algumas letras completamente aleatórias.

Se eu iniciar o Thunderbird após klist purge , parece que o sistema recebe corretamente os novos tickets ( krbtgt\domain.mydomain.com e LDAP\dc02.domain.mydomain.com ).

Log do Tunderbird:

0[e0f140]:   nsAuthSSPI::Init
0[e0f140]:   InitSSPI
0[e0f140]: Using SPN of [ldap/mydomain.com]
0[e0f140]: AcquireCredentialsHandle() succeeded.
0[e0f140]: entering nsAuthSSPI::GetNextToken()
0[e0f140]: InitializeSecurityContext: continue.
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed; total pending operations now = 0
1428[e13ac0]: entering nsAuthSSPI::GetNextToken()
1428[e13ac0]: InitializeSecurityContext: succeeded.
1428[e13ac0]: pending operation added; total pending operations now = 1
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed; total pending operations now = 0
1428[e13ac0]: pending operation added; total pending operations now = 1
0[e0f140]:   nsAuthSSPI::Init
0[e0f140]: Using SPN of [ldap/mydomain.com]
0[e0f140]: AcquireCredentialsHandle() succeeded.
0[e0f140]: entering nsAuthSSPI::GetNextToken()
0[e0f140]: InitializeSecurityContext: continue.
0[e0f140]: pending operation added; total pending operations now = 2
1428[e13ac0]: pending operation removed; total pending operations now = 1
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed; total pending operations now = 0
1428[e13ac0]: entering nsAuthSSPI::GetNextToken()
1428[e13ac0]: InitializeSecurityContext: succeeded.
1428[e13ac0]: pending operation added; total pending operations now = 1
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed
1428[e13ac0]: nsLDAPConnection::RemovePendingOperation(): operation removed; total pending operations now = 0
1428[e13ac0]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=balsams*)(userPrincipalName=balsams*)(sn=balsams*)(cn=balsams*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=balsam*)(userPrincipalName=balsam*)(sn=balsam*)(cn=balsam*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=balsa*)(userPrincipalName=balsa*)(sn=balsa*)(cn=balsa*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=bals*)(userPrincipalName=bals*)(sn=bals*)(cn=bals*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=bal*)(userPrincipalName=bal*)(sn=bal*)(cn=bal*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=bals*)(userPrincipalName=bals*)(sn=bals*)(cn=bals*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=balsa*)(userPrincipalName=balsa*)(sn=balsa*)(cn=balsa*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: nsLDAPOperation::SearchExt(): called with aBaseDn = 'OU=MyContainer,DC=mydomain,DC=com'; aFilter = '(&(objectClass=person)(|(mail=balsam*)(userPrincipalName=balsam*)(sn=balsam*)(cn=balsam*)))'; aAttributes = a,sn,mail; aSizeLimit = 100
0[e0f140]: pending operation added; total pending operations now = 1
1428[e13ac0]: pending operation removed; total pending operations now = 0
0[e0f140]: unbinding
0[e0f140]: unbound
0[e0f140]: unbinding
0[e0f140]: unbound
    
por Michał Sacharewicz 04.04.2013 / 22:34

1 resposta

1

Funciona! A resposta foi bem simples, afinal, apesar de ter achado por um tiro cego:

O campo Bind DN deve estar vazio!

Depois de definir a propriedade DN de vinculação como vazia, ela funciona!

Note que ainda existem alguns obstáculos adicionais:

  • Não é possível usar seu nome de domínio (por exemplo, mydomain.com ) como endereço do servidor LDAP. Você precisa usar especificamente um único nome de controlador de domínio (ou seja, dc03.mydomain.com ). Como o arquivo de configuração TB é um código javscript, tentarei adicionar vários DCs a alguns arrays e randomizar o ldap_2.servers.MyCompany.uri em cada inicialização.
  • As consultas LDAP internas para correspondência de contatos não são mais adequadas para o Active Directory. Você pode usar as seguintes variáveis para personalizar as strings de filtro:
    • ldap_2.servers.MyCompany.autoComplete.filterTemplate é uma consulta de correspondência de preenchimento automático, por exemplo. (|(mail=%v*)(userPrincipalName=%v*)(sn=%v*)(cn=%v*)) , o %v representa todas as letras que você já digitou na caixa de endereço,
    • ldap_2.servers.MyCompany.autoComplete.nameFormat é um "nome legal" para o endereço de e-mail (ou seja, nome e sobrenome), você deve fornecer nomes de campo LDAP entre colchetes, por exemplo: [givenName] [sn]
    • ldap_2.servers.MyCompany.autoComplete.commentFormat é uma coluna adicional na lista suspensa de preenchimento automático, pode ser usada para algumas informações adicionais, como a unidade organizacional, se você armazená-la no seu LDAP do AD.
por 13.04.2013 / 20:40