我试图将使用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握手,我的应用程序无法找到有效的证书,任何建议?
非常感谢任何帮助。
谢谢,
答案 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完美配合。