【问题标题】:Bind to Active Directory via SSL using unbound id使用未绑定 ID 通过 SSL 绑定到 Active Directory
【发布时间】:2016-05-05 12:58:49
【问题描述】:

我希望使用 unboundID 向 AD 进行身份验证,但我在绑定操作时收到 serverdown 错误。 当我通过 JNDI 而不是 unboundID 执行此操作时,请求工作正常。 我在网上查了一下,大多数似乎都有类似的做事方式。 例如我已经提到了特里的这个答案 LDAP: How to authenticate user with connection details

这是我的代码

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 (server down), errorMessage='连接到服务器主机:端口在等待绑定请求响应时关闭 SimpleBindRequest(dn='DC=AA,DC=BB,DC=CC'):尝试从服务器读取响应时发生 I/O 错误:java.net.SocketException: Connection reset') 在 com.unboundid.ldap.sdk.SimpleBindRequest.handleResponse(SimpleBindRequest.java:718) 在 com.unboundid.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:570) 在 com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2150) 在 ldapConnection.LDAPSearch_unboundID.authUser(LDAPSearch_unboundID.java:45) 在 ldapConnection.LDAPSearch_unboundID.main(LDAPSearch_unboundID.java:34)

我已经在其他几台 AD 服务器上尝试过这个。我做错了什么?

更新:我必须补充一点,我正在使用 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 (invalid credentials), errorMessage='80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 57, v1db1 在 com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2178) 在 ldapConnection.LDAPSearch_unboundID.authUser(LDAPSearch_unboundID.java:56) 在 ldapConnection.LDAPSearch_unboundID.main(LDAPSearch_unboundID.java:39)

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

【问题讨论】:

  • 我也有同样的问题。我找不到任何关于 AcceptSecurityContext 的数据十六进制代码 57 我在 Server Stackexchange 上提出的问题:serverfault.com/questions/859277/… 但到目前为止没有答案

标签: java active-directory ldap jndi unboundid-ldap-sdk


【解决方案1】:

我使用类似的东西:

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(),除非您在一个封闭的受信任的网络上。

查找SSLUtil 的更多方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多