DNS命名和证书LDAP上下文问题

时间:2018-07-31 21:10:02

标签: java ldap certificate

在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名称存在问题,如果我使用的名称与证书中显示的名称不同,则无法建立连接。我想知道是否可以跳过此操作,并且可以像过去一样使用域名。

1 个答案:

答案 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

请注意,这不是推荐的方法,因为使用此方法,您的系统将继续受到攻击。