作者:书友64478237 | 来源:互联网 | 2022-12-10 07:45
当我将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(安全LDAP over TLS)连接的稳健性,默认情况下已启用端点识别算法.
请注意,可能存在以前能够成功连接到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.
在Context Interface中也没有与此相关的常量String变量.
如果我恢复到java 1.8.161版本,它工作正常.
1> Vadim..:
doc讲述应用程序系统属性而不是Ldap上下文环境
然后需要在应用程序的应用程序JVM(java命令行)上设置为
-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true