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

标签 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)操作失败的场景 .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 握手,我的应用程序无法找到有效的证书,有什么建议吗?

非常感谢任何帮助。

谢谢,

最佳答案

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

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

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

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

它与 Java 7 完美配合。

关于java - Apache 目录 API 拒绝将用户添加到 Active Directory "(UNWILLING_TO_PERFORM)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29193411/

相关文章:

java - Android Webview EvaluateJavascript 有时不返回响应

java - @Pattern 正则表达式不检查空值

java - dom4j.Node 迭代元素映射

linux - Linux 上的 Squeak SMTP

vb.net - 针对 AD 发送敏感信息

java - 当响应代码为 401 时,ClientHttpResponse.getBody() 抛出 ResourceAccessException

linux - 服务器身份验证失败(SVN/Jenkins)Maven 发布

ssl - 有没有办法强制 svcutil.exe 忽略 SSL 证书问题?

powershell - 如何使用 PowerShell v4 将成员从一个安全组复制到 AD 中的另一个安全组?

windows - 有没有办法检查计算机的 AD 组成员身份?