java - 如何禁用 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 版本,它工作正常。
解决方案
doc 讲述应用程序系统属性而不是 Ldap 上下文环境
然后它需要在应用程序 JVM(java 命令行)上为应用程序设置为
-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true
推荐阅读
- json - ec2 服务策略限制创建入站 ssh 公共访问
- java - 在具有指定容量的构造函数中初始化linkedList的大小的最佳选择是什么?
- node.js - 加载 SQL 文件的 Knex 错误 - “未定义”处或附近的语法错误
- javascript - React js 添加 Class onFocus 并删除 Class onBlur
- javascript - 如何通过在 python 的所有输出中添加 name1.name 2.... 来修改输出
- jquery - Jquery更改段落的值
- javascript - 我的javascript代码功能需要改进
- reactjs - Material ui useStyles() 记录两次
- python - 熊猫未来对列迭代的弃用
- node.js - Postgres 客户端无法通过 AWS lambda 查询