0

我试图将使用 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 APIs 它给了我一个更合理的错误,显然问题来自 SSL 握手,我的应用程序无法找到有效的证书,有什么建议吗?

非常感谢任何帮助。

谢谢,

4

1 回答 1

1

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

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

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

Java 6 还支持 TLSv1 作为最大安全协议,这不是 Apache LDAP 的标准情况,所以要么升级你的 Java,要么使用 JNDI。

它与 Java 7 完美配合。

于 2015-03-24T06:54:23.150 回答