0

关于我的另一个问题:UnboundID LDAP DIGEST-MD5 binding cause NPE

我使用 ApacheDS 作为服务器,使用 UnboundID 作为 API。

我遵循了建议的答案,NPE 不见了。但是,现在我收到了这个错误。

LDAPException(resultCode=49 (invalid credentials), errorMessage='INVALID_CREDENTIALS: DIGEST-MD5: cannot acquire password for 'dn:uid=blah,ou=dev,dc=blah,dc=com in realm : mizar.com', diagnosticMessage='INVALID_CREDENTIALS: DIGEST-MD5: cannot acquire password for dn:uid=blah,ou=dev,dc=blah,dc=com in realm : blah.com')
at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:1881)
at UnboundDemo.main(UnboundDemo.java:40)

代码如下:

  conn = new LDAPConnection("1.1.1.1",389);
  mdBind = new DIGESTMD5BindRequest("dn:uid=blah,ou=dev,dc=blah,dc=com", null, "test", "blah.com",null);
  bindResult = conn.bind(mdBind);
  System.out.println("MD5 bind success!");

这是 Directory Studio 配置页面中的 ApacheDS SASL 配置:

SASL Host: 1.1.1.1
SASL Principal: ldap/ldap.example.com@EXAMPLE.COM 
Search Base Dn: ou=dev,dc=blah,dc=com

ApacheDS 文档没有解释 SASL 主体是什么,所以我开始认为这可能是我的错误配置。这里的主要思想是针对一些 SASL 机制测试 UnboundID。

4

1 回答 1

2

很可能 ApacheDS 服务器未配置为以允许其确定密码的明文值的格式存储密码。

DIGEST-MD5 和 CRAM-MD5 SASL 机制的主要吸引力在于密码与其他信息相结合,并在发送到服务器之前使用单向摘要进行编码。这确保了密码不会以明文形式传输,因此可以防止任何人可以观察通信而无需保护通信的其余部分。但是,使用其中一种机制进行身份验证的能力要求服务器能够确定密码的明文版本,以便它可以执行与客户端相同的加密处理。

如果您只是想测试 UnboundID LDAP SDK 执行 SASL 身份验证的能力,那么我建议使用 PLAIN 机制,因为它不应该对用户条目施加任何特殊要求。如果您真的想使用 DIGEST-MD5,那么您需要确保服务器可以访问需要使用该机制进行身份验证的用户的密码的明文表示。

尼尔

于 2013-07-06T02:23:00.997 回答