【发布时间】:2018-10-16 21:45:55
【问题描述】:
当我将 java 从 1.8.161 升级到 1.8.181 时,我无法从我的应用程序连接到 LDAP, 当我尝试使用在 LDAP 中处于活动状态的用户登录应用程序时,出现以下异常。
javax.naming.CommunicationException: : [根异常是 javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException: 未找到与 IP 地址匹配的主题备用名称]
我在 Oracle 网站上找到了以下 release notes 版本 1.8.181
变化
核心库/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 为真。
上下文接口中也没有与此相关的常量String变量。
如果我恢复到 java 1.8.161 版本,它可以正常工作。
【问题讨论】:
-
也许您可以在 java start 命令行中尝试
-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true?因为 doc 讲述的是应用程序系统属性而不是 Ldap 上下文环境...... -
精彩的瓦迪姆!!。非常感谢您提醒我错过的小点。是的,我在 Eclipse VM 参数以及 JBOSS Server Standalone.bat 文件中添加了 ====>set "JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.jndi. ldap.object.disableEndpointIdentification=true"
-
问题解决了吗?