在Java中使用LDAPConnection和端口636

在Java中使用LDAPConnection和端口636,java,ldap,Java,Ldap,我试图让应用程序的LDAP连接使用安全端口636而不是389。下面的代码在端口389上运行得很好,但在389上引发异常,然后用636重新计算 线程“main”ldapeException(resultCode=81(服务器关闭),errorMessage='与服务器nlbldap.company_name.co.uk:636的连接在等待绑定请求SimpleBindRequest(dn='1)的响应时关闭jdoe@company_name.co.uk“):尝试从服务器读取响应时发生I/O错误:So

我试图让应用程序的LDAP连接使用安全端口636而不是389。下面的代码在端口389上运行得很好,但在389上引发异常,然后用636重新计算

线程“main”ldapeException(resultCode=81(服务器关闭),errorMessage='与服务器nlbldap.company_name.co.uk:636的连接在等待绑定请求SimpleBindRequest(dn='1)的响应时关闭jdoe@company_name.co.uk“):尝试从服务器读取响应时发生I/O错误: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)”,修订版=24950)” 位于com.unbounded.ldap.sdk.SimpleBindRequest.HandlerResponse(SimpleBindRequest.java:723) 位于com.unbounded.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:575) 位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2154) 位于com.unbounded.ldap.sdk.LDAPConnection.(LDAPConnection.java:670) 位于com.unbounded.ldap.sdk.LDAPConnection.(LDAPConnection.java:563) 位于LdapsMain1.LdapSoton.connect(LdapSoton.java:39) 位于LdapsMain1.Main.Main(Main.java:26)

包mywork.classes;
导入java.util.List;
导入com.unboundd.ldap.sdk.Filter;
导入com.unboundd.ldap.sdk.LDAPConnection;
导入com.unbounded.ldap.sdk.LDAPException;
导入com.unboundd.ldap.sdk.LDAPSearchException;
导入com.unboundd.ldap.sdk.SearchRequest;
导入com.unboundd.ldap.sdk.SearchResult;
导入com.unboundd.ldap.sdk.SearchResulty;
导入com.unboundd.ldap.sdk.SearchScope;
公共类Ldapcompany\u名称{
静态布尔连接(字符串用户名、字符串密码)引发LDAPException
{                
String baseDN=“ou=user,dc=company\u name,dc=co,dc=uk”;
字符串筛选器=“(&(cn=“+username+”)(objectClass=user))”;
布尔hasRights=false;
LDAPConnection connection=新的LDAPConnection(“nlbldap.company_name.co.uk”,389,用户名+“@company_name.co.uk”,密码);
List results=getResults(连接、baseDN、过滤器);
String msg=“results.size()=”+results.size();
for(SearchResultEntry条目:结果)
{
for(字符串v:entry.getAttributeValue(“memberof”))
{
如果(v.contains(“ISSWA SIS Web”))
{
hasRights=正确;
}
}
}
返回权;
}
私有静态列表getResults(LDAPConnection连接、字符串baseDN、字符串筛选器)抛出LDAPSearchException、LDAPException
{
搜索结果搜索结果;
Filter filter2=Filter.createEqualityFilter(“ou”、“*”);
SearchRequestSearchRequest2=新的SearchRequest(“dc=公司名称,dc=co,dc=uk”,SearchScope.SUB,过滤器,“cn”,“mail”,“memberOf”);
if(connection.isConnected())
{
searchResult=connection.search(searchRequest2);
for(SearchResultEntry条目:searchResult.getSearchEntries())
{
字符串名称=entry.getAttributeValue(“cn”);
Object mail=entry.getAttributeValue(“memberOf”);
System.out.println(name+“”+mail);
}
返回searchResult.getSearchEntries();
}
返回null;
}
}
这是堆栈跟踪

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)
线程“main”ldapeException(resultCode=81(服务器关闭),errorMessage='与服务器nlbldap.company_name.co.uk:636的连接在等待绑定请求SimpleBindRequest(dn=)响应时关闭jdoe@company_name.co.uk“):尝试从服务器读取响应时发生I/O错误: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)”,修订版=24950)”
位于com.unbounded.ldap.sdk.SimpleBindRequest.HandlerResponse(SimpleBindRequest.java:723)
位于com.unbounded.ldap.sdk.SimpleBindRequest.process(SimpleBindRequest.java:575)
位于com.unbounded.ldap.sdk.LDAPConnection.bind(LDAPConnection.java:2154)
位于com.unbounded.ldap.sdk.LDAPConnection.(LDAPConnection.java:670)
位于com.unbounded.ldap.sdk.LDAPConnection.(LDAPConnection.java:563)
位于LdapsMain1.LdapSoton.connect(LdapSoton.java:39)
位于LdapsMain1.Main.Main(Main.java:26)
如果不知道答案,就很难确定

但是我猜您没有向连接对象提供任何TLS参数


查看此示例源代码:

添加以下代码允许该函数使用端口636

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

我已经放进了堆栈跟踪
SSLUtil sslUtil = new SSLUtil(null, new TrustAllTrustManager());
SSLSocketFactory socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnection connection = new LDAPConnection(socketFactory, "nlbldap.company_name.com", 636);