我使用以下测试代码连接到ldap服务器。它在windows上运行正常,但是在linux上它连接时我在第一次尝试时运行程序然后在第二次它抛出异常并在第三次尝试它连接成功等等(即奇数执行成功,偶数失败)这很奇怪。我在java默认密钥库中添加了ssl证书。我使用的是java 1.8_161。密钥库位置:“/ usr / java / jre1.8.0_161/lib/security/cacerts”。我正在将代码块作为jar文件执行。
Hashtable<String, String> ldapContextDetails = new Hashtable<>();
ldapContextDetails.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapContextDetails.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapContextDetails.put(Context.SECURITY_PRINCIPAL, "username");
ldapContextDetails.put(Context.SECURITY_CREDENTIALS, "password");
ldapContextDetails.put(Context.REFERRAL, "follow");
ldapContextDetails.put("com.sun.jndi.ldap.connect.timeout", "10000");
ldapContextDetails.put(Context.SECURITY_PROTOCOL, "ssl");
String providerUrl = "ldap://domain1.com:636/";
ldapContextDetails.put(Context.PROVIDER_URL, providerUrl);
InitialLdapContext ldapContext;
try {
ldapContext = new InitialLdapContext(ldapContextDetails, null);
System.out.println("connected");
} catch (NamingException e) {
e.printStackTrace();
}
更新
我启用了ssl日志,发现在失败的情况下服务器是通过TLSv1.2建立的:
1118 main, READ: TLSv1.2 Handshake, length = 1607
1119 *** ServerHello, TLSv1.2
如果通过TLSv1成功:
1200 main, READ: TLSv1 Handshake, length = 2927
1201 *** ServerHello, TLSv1
此外,我已检查证书已过期,TLSv1.2也不支持,但TLSv1是否支持此功能? 。对每个连接选择交替完成TLS协议的行为是什么?
答案 0 :(得分:1)
显然,它背后有2台LDAP服务器,并且必须按照@EugèneAdell的指示添加两者的证书。