如何禁用Java 1.8.181版本的终端点识别

6
当我将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接口中也没有与此相关的常量字符串变量。

如果我回退到Java 1.8.161版本,它可以正常工作。


1
也许你可以在Java启动命令行中尝试使用“-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true”?因为文档提到的是应用程序系统属性,而不是LDAP上下文环境... - Vadim
太棒了,Vadim!!非常感谢你提醒我错过的小细节。是的,我已经在Eclipse VM参数和JBOSS服务器standalone.bat文件中添加了====>set "JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true" - Aravind
你解决了这个问题吗? - Waka Waka
2个回答

22

该文档讲述了应用程序系统属性,而非 Ldap 上下文环境。

因此,需要在应用程序 JVM(Java 命令行)上为应用程序进行设置,如下:

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

2
可悲的是,我仅能找到如何禁用它的相关信息,而无法了解如何在启用它的情况下使其运作。 - user3183018
2
我的错误信息显示“java.security.cert.CertificateException: No subject alternative DNS name matching ldaps.xx.com found.” 所以花了一段时间才找到问题所在。 - Janet
嗨,我尝试过这个(甚至在代码中验证了环境变量),但它并没有缓解问题。我创建了一个新问题:https://stackoverflow.com/questions/64590737/during-an-ssl-soap-request-sslhandshake-consume-ignores-value-of-com-sun-jndi-l,不知道你是否可以帮忙看一下? :) - DraxDomax

1
为您的LDAP配置的证书添加IP地址的SAN。
例如,对于您的证书请求配置(request.inf):
[RequestAttributes]
SAN="ipaddress=10.233.207.65"

[Extensions] 
2.5.29.17 = "{text}" 
continue_ = "ipaddress=10.233.207.65"

"并且对于证书生成,类似以下内容"
keyUsage=digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectKeyIdentifier=hash
subjectAltName=@alt_names

[alt_names]
IP = 10.233.207.65

在extfile配置中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接