我试图使用Java 6和Apache Directory API将用户添加到运行在windows server 2008上的Active Directory,但我得到的结果是(UNWILLING_to_PERFORM),现在我知道它需要一个安全的连接,并使用unicodePwd属性来添加密码,我已经这样做了,或者至少尝试过这样做。服务器管理员为我添加用户时使用的帐户创建了一个证书,我将其导出并添加到/jre/lib/security/中的cacert中。
我试着看看我是否可以在不执行任何操作的情况下安全地连接到AD服务器,我得到了两个绑定操作失败的场景。bind():
1-如果我使用端口636连接,并使用ldapNetworkConnection中可用的startTLS():那么我要么得到PROTOCOL_ERROR服务器,就会断开
2-如果我使用端口389连接并使用LdapConnectionConfig中可用的startTLS(),我会得到"初始化SSL上下文失败"one_answers"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目录,并确保将用于登录Active Directory的帐户的证书导出为PKCS12,并将其添加到密钥库中。
因此它有2个证书,1个用于登录/绑定帐户,1个用作CA(证书颁发机构)的服务器。
此外,Java 6支持TLSv1作为最大安全协议,这不是Apache LDAP的标准情况,因此升级Java或使用JNDI。
它与Java7。