首页 > 解决方案 > 如何禁用 java 1.8.181 版本的端点识别

问题描述

当我将 java 从 1.8.161 升级到 1.8.181 时,我无法从我的应用程序连接到 LDAP,当我尝试使用在 LDAP 中处于活动状态的用户登录应用程序时出现以下异常。

javax.naming.CommunicationException::[根异常是 javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:找不到与 IP 地址匹配的主题替代名称]

我在 Oracle 网站上找到了以下版本说明1.8.181

变化

core-libs/javax.naming ➜ 改进 LDAP 支持 LDAPS 连接上已启用端点识别。

为了提高 LDAPS(基于 TLS 的安全 LDAP)连接的稳健性,默认情况下已启用端点识别算法。

请注意,在某些情况下,以前能够成功连接到 LDAPS 服务器的某些应用程序可能不再能够这样做。如果它们认为合适,此类应用程序可能会使用新的系统属性禁用端点识别:com.sun.jndi.ldap.object.disableEndpointIdentification.

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


我尝试将属性设置为 true,如下所示以及其他属性。但它仍然会引发同样的错误。

Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, ctxFactory);
    env.put(Context.PROVIDER_URL, providerUrl);
    env.put(Context.SECURITY_PRINCIPAL, secPrincipal);
    env.put(Context.SECURITY_AUTHENTICATION, secAuthentication);
    env.put(Context.SECURITY_CREDENTIALS, secCredentials);
   env.put("com.sun.jndi.ldap.object.disableEndpointIdentification" ,disableEndpointIdentification);
    DirContext ldapCtx = new InitialDirContext(env);

需要您的帮助,我们需要将属性设置 com.sun.jndi.ldap.object.disableEndpointIdentification为 true 的方式和位置。

上下文接口中也没有与此相关的常量字符串变量。

如果我恢复到 java 1.8.161 版本,它工作正常。

标签: javajava-8ldap

解决方案


doc 讲述应用程序系统属性而不是 Ldap 上下文环境

然后它需要在应用程序 JVM(java 命令行)上为应用程序设置为

-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true

推荐阅读