Java 使用未绑定id通过SSL绑定到Active Directory

Java 使用未绑定id通过SSL绑定到Active Directory,java,active-directory,ldap,jndi,unboundid-ldap-sdk,Java,Active Directory,Ldap,Jndi,Unboundid Ldap Sdk,我希望使用Unbounded对AD进行身份验证,但在绑定操作中出现了serverdown错误。 当我通过JNDI而不是unbounded执行此操作时,请求工作正常。 我在网上查过,大多数人似乎都有类似的做事方式。 例如,我引用了特里的回答 这是我的密码 public class LDAPSearch_unboundID { private static final String LDAPIP = "hostname"; private static final int LDAPPORT =

我希望使用Unbounded对AD进行身份验证,但在绑定操作中出现了serverdown错误。 当我通过JNDI而不是unbounded执行此操作时,请求工作正常。 我在网上查过,大多数人似乎都有类似的做事方式。 例如,我引用了特里的回答

这是我的密码

public class LDAPSearch_unboundID {

private static final String LDAPIP = "hostname";
private static final int LDAPPORT = 636;
private static final String USERDN = "adminuser"; 
private static final String PASSWD = "adminpass";
private static final String SEARCHDN = "DC=AA,DC=BB,DC=CC";

public static void main(String[] args) {

    authUser();
}

private static void authUser(String userid) {

     BindRequest bindRequest = new SimpleBindRequest(SEARCHDN,PASSWD);
     System.out.println("101");
     try {
     LDAPConnection ldapConnection = new LDAPConnection(LDAPIP,LDAPPORT);
     //LDAPConnection ldapConnection = new LDAPConnection(lco, LDAPIP,LDAPPORT, SEARCHDN, PASSWD);
     System.out.println("102");
     BindResult bindResult = ldapConnection.bind(bindRequest);
     System.out.println("103");
     ResultCode resultCode = bindResult.getResultCode();
     System.out.println("104");
     if(resultCode.equals(ResultCode.SUCCESS))
     {
         System.out.println("Authentication SUCCESS!!!");
     }
     else
     {
         System.out.println("Authentication FAILED!!!");
     }
     ldapConnection.close();
     } 
     catch (LDAPException e){
        e.printStackTrace();
     }

     }


}
这里是输出

101 102 LDAPException(resultCode=81(服务器关闭),errorMessage='与服务器主机的连接:端口在等待绑定请求SimpleBindRequest的响应时关闭(dn='DC=AA,DC=BB,DC=CC'):尝试从服务器读取响应时发生I/O错误:java.net.SocketException:连接重置') 位于com.unbounded.ldap.sdk.SimpleBindRequest.HandlerResponse(SimpleBindRequest.java:718) 位于com.unbounded.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:570) 位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2150) 位于ldapConnection.LDAPSearch_unbounded.authUser(LDAPSearch_unbounded.java:45) 位于ldapConnection.LDAPSearch_unbounded.main(LDAPSearch_unbounded.java:34)

我已经在其他几个广告服务器上试过了。我做错了什么

更新:我必须补充一点,我正在使用SSL连接。 我试着用这个更新代码的ldapconnection部分

         SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
     LDAPConnection ldapConnection = new LDAPConnection(socketFactory);
     ldapConnection.connect(LDAPIP,LDAPPORT);
     System.out.println("102");
     BindResult bindResult = ldapConnection.bind(bindRequest);
现在我得到了这个错误

101 102 LDAPException(resultCode=49(无效凭证),errorMessage='80090308:LdapErr:DSID-0C090A9,comment:AcceptSecurityContext错误,数据57,v1db1 位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2178) 位于ldapConnection.LDAPSearch_unbounded.authUser(LDAPSearch_unbounded.java:56) 位于ldapConnection.LDAPSearch_unbounded.main(LDAPSearch_unbounded.java:39)

我看不到结果代码49下“数据57”的任何文档。 凭据是正确的。

我使用的是以下内容:

public static LDAPConnection getNewSSLConnection(String address, int port, BindRequest bindRequest) throws LDAPException, GeneralSecurityException
{
    SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
    SSLSocketFactory sslSocketFactory = sslUtil.createSSLSocketFactory();
    LDAPConnection ldc = new LDAPConnection(sslSocketFactory);
    ldc.connect(address, port);
    ldc.bind(bindRequest);
    return ldc;
}
除非您在封闭的受信任网络上,否则不要使用“TrustAllTrustManager()


找到更多方法。

我也有同样的问题。我找不到AcceptSecurityContext的数据十六进制代码57。我在Server Stackexchange上问了这个问题:但到目前为止没有答案