【问题标题】:How to disable endpoint identification for java 1.8.181 version如何禁用 java 1.8.181 版本的端点识别
【发布时间】: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"
  • 问题解决了吗?

标签: java java-8 ldap


【解决方案1】:

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

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

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

【讨论】:

  • 悲伤的部分是我能找到的唯一信息告诉你如何禁用它,而不是如何让它在启用它的情况下工作。
  • 我的错误消息说“java.security.cert.CertificateException:找不到与 ldaps.xx.com 匹配的主题备用 DNS 名称。”所以花了一段时间来解决这个问题。
  • 嗨,我试过这个(甚至验证了代码中的环境变量),但它并没有缓解问题。我创建了一个新问题:stackoverflow.com/questions/64590737/…,想知道您是否可以看一下? :)
【解决方案2】:

将您的 IP 地址的 SAN 添加到您的 LDAP 上配置的证书中

例如为您的证书请求配置(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 配置中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2018-05-27
    • 2013-03-22
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多