在Java 1.8.0_181的最新更新中,当我尝试创建与Active Directory的LDAPS连接时遇到问题。使用以下代码,直到1.8.0_171版本,我都可以毫无问题地创建它
Hashtable<String, Object> objEnvironment;
objEnvironment = new Hashtable<String, Object>(11);
objEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
objEnvironment.put(Context.PROVIDER_URL, "LDAPS://domain:636");
objEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple");
objEnvironment.put(Context.SECURITY_PRINCIPAL, <username>);
objEnvironment.put(Context.SECURITY_CREDENTIALS, <Password>);
objEnvironment.put("java.naming.ldap.attributes.binary", <attributes>);
System.setProperty("javax.net.ssl.trustStore", "certificates".concat(File.separator).concat("cacerts"));
this.objLDAPContext = new InitialLdapContext(objEnvironment, null);
但是在最新版本中,我得到以下异常java.security.cert.CertificateException:找不到xxxx.xxxx.xxx的DNS名称 查找时发现FDQN名称存在问题,如果我使用的名称与证书中显示的名称不同,则无法建立连接。我想知道是否可以跳过此操作,并且可以像过去一样使用域名。
答案 0 :(得分:0)
您遇到的问题可能是由于Java 1.8.0_181
中引入的更改,以改善LDAP支持。请参阅发行说明here。
➜改善LDAP支持已在上启用端点标识 LDAPS连接。
提高LDAPS的鲁棒性(基于TLS的安全LDAP) 连接,端点识别算法已启用 默认。
请注意,在某些情况下, 以前能够成功连接到LDAPS服务器的端口可能没有 不再能够这样做。如果他们认为此类申请可以 适当,使用新系统禁用端点标识 属性:com.sun.jndi.ldap.object.disableEndpointIdentification。
定义此系统属性(或将其设置为true)以禁用端点 识别算法。
您可以在运行代码时使用变通办法添加-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true
。
请注意,这不是推荐的方法,因为使用此方法,您的系统将继续受到攻击。