我正在开发一个Java LDAP客户端,但我仍然缺少一些有关如何正确执行此操作的信息或知识。
我的代码如下:
LdapContext ctx = null;
Hashtable<String, String> env = new Hashtable <String, String>();
try{
env.clear();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "url");
env.put(Context.SECURITY_PRINCIPAL, "user");
env.put(Context.SECURITY_CREDENTIALS, "password");
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put("java.naming.security.ssl.ciphers", "SSL_RSA_EXPORT_WITH_RC4_40_MD5");
ctx = new InitialLdapContext(env, null);
} catch(NamingException nex) {
// error handling
}
目前发生以下事情:
*** ClientHello, TLSv1.2
和*** ServerHello, TLSv1
我现在缺少的东西:
答案 0 :(得分:0)
首先扫描您的服务器,然后浪费时间查看可能根本无法使用的内容。使用:https://github.com/rbsec/sslscan
您的服务器可能仅支持TLS 1.0。
答案 1 :(得分:-1)
你使用哪个java版本? 似乎ldap服务器不支持TLSv1.2 你应该为ldap服务指定专用的ssl套接字工厂。
env.put("java.naming.ldap.factory.socket", CustomTLSSSLSocketFactory.class.getName);
CustomTLSSSLSocketFactory extends SSSLSocketFactory {
public CustomTLSSSLSocketFactory() {
TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
factory.init((KeyStore) null);
TrustManager[] defaultTrustManagers = factory.getTrustManagers();
// create the real socket factory
SSLContext sc = SSLContext.getInstance("TLS"); //$NON-NLS-1$
sc.init(null, defaultTrustManagers, null);
delegate = sc.getSocketFactory();
}
}