问题:
我正在尝试配置LDAP 邮件自动完成- 2008R2 域环境中Mozilla Thunderbird 17.0.5 @ Windows 7 x64的内置功能。该操作系统是 VBox 上全新的开箱即用安装。看来我无法让它与 Kerberos 身份验证(本机 SSPI)一起使用。
我已经正确配置了 LDAP 参数 - 我已经设法在 Thunderbird 中使用“简单”身份验证模式来验证这一点(在该应用程序中,应用程序要求用户手动输入域凭据)。在那种模式下,TB 自动完成工作。
然而,每当我切换到 Kerberos 身份验证时,我都没有得到自动完成结果。VBox 在我在地址字段中键入每个字母后显示一些网络活动,但没有返回任何结果。
这对标准用户帐户和域管理员帐户都是一样的。
问题:
据我所知,这可能是 Thunderbird 的某些问题或域/kerberos 问题。
根据 google 的结果,Thunderbird 的这个功能并不是很受欢迎,但我读过的大部分内容似乎都证明这应该适用于任何默认配置的域环境。由于域控制器是由前雇员设置的,因此域的某些功能可能被重新配置或禁用。我从未接触过内置的 Kerberos。
谁能告诉我,我应该寻找什么?
调试:
我试图调试 Thunderbird 客户端并得到了我在底部发布的日志。日志没有显示错误,虽然我对 Kerberos 的内部工作几乎一无所知,但据我所知,客户端正在尝试验证 ( InitializeSecurityContext: succeeded
) 但似乎从未收到任何答复。然而 TB 也没有返回任何错误。
此外,无论我配置的是正确的Bind DN
名称([email protected]
是正确的名称)还是一些完全随机的字母,日志似乎都几乎相同。
如果我在 之后启动 Thunderbird klist purge
,系统似乎会正确获取新票证 (krbtgt\domain.mydomain.com
和LDAP\dc02.domain.mydomain.com
)。
雷鸟日志:
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
有用!答案毕竟很简单,尽管我是盲目发现的:
该
Bind DN
字段必须为空!一旦将 Bind DN 属性设置为空,它就可以工作了!
请注意,还有一些额外的障碍:
mydomain.com
)作为 LDAP 服务器地址。您需要专门使用一个 DC 名称(即。dc03.mydomain.com
)。由于 TB 配置文件是一个 javscript 代码,我会尝试将几个 DC 添加到某个数组并ldap_2.servers.MyCompany.uri
在每次启动时随机化。ldap_2.servers.MyCompany.autoComplete.filterTemplate
是自动完成匹配查询,例如。(|(mail=%v*)(userPrincipalName=%v*)(sn=%v*)(cn=%v*))
,%v
代表您已经在地址栏中输入的所有字母,ldap_2.servers.MyCompany.autoComplete.nameFormat
是电子邮件地址的“好听的名字”(即姓名和姓氏),您必须在方括号中提供 LDAP 字段名称,即:[givenName] [sn]
ldap_2.servers.MyCompany.autoComplete.commentFormat
是自动完成下拉列表中的附加列,可用于一些附加信息,如组织单位 - 如果将其存储在 AD LDAP 中。