代码之家  ›  专栏  ›  技术社区  ›  delucaezequiel

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

  •  0
  • delucaezequiel  · 技术社区  · 8 年前

    在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 回复  |  直到 8 年前
        1
  •  0
  •   Pallavi Sonal    8 年前

    您遇到的问题可能是由于 Java 1.8.0_181 以改进LDAP支持。参考发行说明 here .

    –Improve LDAP support Endpoint identification已在上启用 LDAPS连接。

    提高LDAP(安全的LDAP over TLS)的健壮性 连接、端点识别算法已由 违约。

    注意,有些应用程序 以前能够成功连接到LDAPS服务器的 能做的时间更长。如果他们认为 适当,使用新系统禁用端点标识 属性:com.sun.jndi.ldap.object.disableEndpointIdentification。

    定义此系统属性(或将其设置为true)以禁用终结点 识别算法。

    您可以使用解决方法添加 -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true 运行代码时。

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