Apache 目录 API 拒绝将用户添加到 Active Directory“(UNWILLING_TO_PERFORM)”

Apache directory API refuses to add user to Active Directory "(UNWILLING_TO_PERFORM)"

我正在尝试使用 Java 6 和 Apache Directory API 将用户添加到 windows 服务器 2008 上的 Active Directory 运行,但我得到的结果是 ( UNWILLING_TO_PERFORM),现在我明白它需要一个安全连接并使用 unicodePwd 属性来添加密码,我这样做了,或者至少尝试这样做了。 服务器管理员为我在添加用户时使用的帐户创建了一个证书,我将其导出并添加到 /jre/lib/security/.

中的 cacert

我试着看看我是否可以在不执行任何操作的情况下安全地连接到 AD 服务器,我得到 2 个绑定操作失败的场景 .bind():

1- 如果我使用端口 636 连接并使用 ldapNetworkConnection 中可用的 startTLS():那么我要么得到 PROTOCOL_ERROR 服务器将断开连接

2- 如果我使用端口 389 连接并使用 LdapConnectionConfig 中可用的 startTLS(),我会得到 "Failed to initialize the SSL context" 和 "IllegalArgumentException :TLSv1.1"

我添加了信任管理器但仍然没有成功,下面是目前的代码。

  LdapConnectionConfig config = new LdapConnectionConfig();
            config.setLdapHost(IP);
            config.setLdapPort(389);


            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

            tmf.init((KeyStore)null);
            config.setTrustManagers(tmf.getTrustManagers());
            config.setName("CN=TestAdmin,CN=Users,DC=bmrk,DC=com");
            config.setCredentials("P@ssw0rd");

 LdapNetworkConnection ldapNetworkConnection = new LdapNetworkConnection(config);
ldapNetworkConnection.connect();
            ldapNetworkConnection.startTls();
            ldapNetworkConnection.bind();

// 编辑 我切换到 JNDI LDAP APIs 它给了我一个更合理的错误,显然问题来自 SSL 握手,我的应用程序无法找到有效的证书,有什么建议吗?

非常感谢任何帮助。

谢谢,

万一有人感兴趣,我唯一的问题是在 cacerts 文件中添加生成证书的服务器作为 CA 授权机构,这样 JVM 就可以信任服务器颁发的证书,尽管它与JNDI ldap API 不能与 Apache Directory 一起工作,不知道为什么。

所以我的建议是使用 JNDI 而不是 Apache Directory,并确保将用于登录 Active Directory 的帐户的证书导出为 PKCS12,并将其添加到密钥库。

所以它有 2 个证书,1 个用于 login/bind 帐户,1 个用于充当 CA(证书颁发机构)的服务器。

另外 Java6 支持 TLSv1 作为最高安全协议,这不是 Apache LDAP 的标准情况,因此请升级您 Java 或使用 JNDI。

它与 Java 7.

完美配合