0

I'm trying to get an application's LDAP connection to use secure port 636 instead of 389. The following code works perfectly fine with port 389 but throws an Exception with 389 is repalced with 636.

Exception in thread "main" LDAPException(resultCode=81 (server down), errorMessage='The connection to server nlbldap.company_name.co.uk:636 was closed while waiting for a response to a bind request SimpleBindRequest(dn='jdoe@company_name.co.uk'): An I/O error occurred while trying to read the response from the server: SocketException(message='Connection reset', trace='read(SocketInputStream.java:186) / read(SocketInputStream.java:140) / fill(BufferedInputStream.java:252) / read(BufferedInputStream.java:271) / read(ASN1StreamReader.java:992) / readType(ASN1StreamReader.java:329) / beginSequence(ASN1StreamReader.java:912) / readLDAPResponseFrom(LDAPMessage.java:1146) / run(LDAPConnectionReader.java:251)', revision=24950)') at com.unboundid.ldap.sdk.SimpleBindRequest.handleResponse(SimpleBindRequest.java:723) at com.unboundid.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:575) at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2154) at com.unboundid.ldap.sdk.LDAPConnection.(LDAPConnection.java:670) at com.unboundid.ldap.sdk.LDAPConnection.(LDAPConnection.java:563) at LdapsMain1.LdapSoton.connect(LdapSoton.java:39) at LdapsMain1.Main.main(Main.java:26)

package mywork.classes;

import java.util.List;
import com.unboundid.ldap.sdk.Filter;
import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.LDAPSearchException;
import com.unboundid.ldap.sdk.SearchRequest;
import com.unboundid.ldap.sdk.SearchResult;
import com.unboundid.ldap.sdk.SearchResultEntry;
import com.unboundid.ldap.sdk.SearchScope;

public class Ldapcompany_name {

    static boolean connect(String username, String password) throws LDAPException 
    {                
        String baseDN = "ou=user,dc=company_name,dc=co,dc=uk";
        String filter = "(&(cn="+username+")(objectClass=user))";
        boolean hasRights = false;
        LDAPConnection connection = new LDAPConnection("nlbldap.company_name.co.uk", 389, username+"@company_name.co.uk", password);
        List<SearchResultEntry> results = getResults(connection, baseDN, filter);
        String msg = "results.size() = " + results.size();
        for(SearchResultEntry entry : results)
        {
            for(String v : entry.getAttributeValues("memberof")) 
            {
                if(v.contains("ISSWA-SIS-Web"))
                {
                    hasRights = true;
                }
            }
        }
        return hasRights;
    }
    private static List<SearchResultEntry> getResults(LDAPConnection connection, String baseDN, String filter) throws LDAPSearchException, LDAPException 
    {
        SearchResult searchResult;
        Filter filter2 = Filter.createEqualityFilter("ou", "*");
        SearchRequest searchRequest2 =  new SearchRequest("dc=company_name,dc=co,dc=uk", SearchScope.SUB, filter,"cn", "mail","memberOf");
        if (connection.isConnected()) 
        {
            searchResult = connection.search(searchRequest2);
            for (SearchResultEntry entry : searchResult.getSearchEntries())
            {
                  String name = entry.getAttributeValue("cn");
                  Object mail = entry.getAttributeValues("memberOf");
                  System.out.println(name + " " + mail);
            }
            return searchResult.getSearchEntries();
        }
        return null;
    }
}

This is the stack trace

Exception in thread "main" LDAPException(resultCode=81 (server down), errorMessage='The connection to server nlbldap.company_name.co.uk:636 was closed while waiting for a response to a bind request SimpleBindRequest(dn='jdoe@company_name.co.uk'):  An I/O error occurred while trying to read the response from the server:  SocketException(message='Connection reset', trace='read(SocketInputStream.java:186) / read(SocketInputStream.java:140) / fill(BufferedInputStream.java:252) / read(BufferedInputStream.java:271) / read(ASN1StreamReader.java:992) / readType(ASN1StreamReader.java:329) / beginSequence(ASN1StreamReader.java:912) / readLDAPResponseFrom(LDAPMessage.java:1146) / run(LDAPConnectionReader.java:251)', revision=24950)')
    at com.unboundid.ldap.sdk.SimpleBindRequest.handleResponse(SimpleBindRequest.java:723)
    at com.unboundid.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:575)
    at com.unboundid.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2154)
    at com.unboundid.ldap.sdk.LDAPConnection.<init>(LDAPConnection.java:670)
    at com.unboundid.ldap.sdk.LDAPConnection.<init>(LDAPConnection.java:563)
    at LdapsMain1.LdapSoton.connect(LdapSoton.java:39)
    at LdapsMain1.Main.main(Main.java:26)

2 Answers 2

1

Without knowing the LDAP Result code it would be hard to determine for sure.

But I would guess you are not providing any TLS parameters to the connection object.

Check out this sample source code: https://bitbucket.org/jwilleke/examples/src/master/Examples-JNDI/src/com/willeke/samples/ldap/jndi/ADConnection.java?at=master

Sign up to request clarification or add additional context in comments.

1 Comment

I've put in the Stack Trace
1

Adding the following code allowed the function to work with port 636

SSLUtil sslUtil = new SSLUtil(null, new TrustAllTrustManager());
SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(socketFactory, "nlbldap.company_name.com", 636);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.