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

时间:2015-03-22 10:46:41

标签: java ssl active-directory ldap apache-directory

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

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

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

2-如果我使用端口389进行连接并使用LdapConnectionConfig中提供的startTLS(),则会出现“无法初始化SSL上下文”和“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 API它给了我一个更合理的错误,显然问题来自SSL握手,我的应用程序无法找到有效的证书,任何建议?

非常感谢任何帮助。

谢谢,

1 个答案:

答案 0 :(得分:1)

如果有人感兴趣,我唯一的问题是在cacerts文件中添加生成证书的服务器作为CA权限,以便JVM可以信任服务器颁发的证书,尽管它可以顺利地完成JNDI ldap它不能与Apache Directory一起使用的API不确定原因。

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

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

此外,Java 6支持TLSv1作为最高安全协议,而不是Apache LDAP的标准情况,因此要么升级Java,要么使用JNDI。

它与Java 7完美配合。