Java对接AD/LDAP的常见错误,以及解决办法
1、[LDAP: error code 34 - 00000057: LdapErr: DSID-0C090B60, comment: Error processing name, data 0, v1db1
在编辑AD域控帐号属性或密码的时候,经常会遇到这个错误;
为什么会产生这个错误?
我经过验证列举了几个错误的例子:
ldapContext.modifyAttributes(userDN, mods);//这是修改AD帐号密码的方法;
1)参数userDN如果不是这种格式(CN=张三,OU=测试,OU=**公司,DC=test,DC=com)就会报上面的错误;
2)参数userDN如果包含一些特殊符号,就会报上面的错误;
比如:userDN = CN=张三,OU=测试+研发,OU=**公司,DC=test,DC=com
userDN = CN=张三,OU=测试,研发,OU=**公司,DC=test,DC=com
userDN = CN=张三,OU=测试=研发,OU=**公司,DC=test,DC=com
上面的格式都会造成上面的错误,一定要把值进行转义才可以成功:
userDN = CN=张三,OU=测试\+研发,OU=**公司,DC=test,DC=com
userDN = CN=张三,OU=测试\,研发,OU=**公司,DC=test,DC=com
userDN = CN=张三,OU=测试\=研发,OU=**公司,DC=test,DC=com
体现代码就是:
userDN = userDN.replaceAll("\\+", "\\\\+");
userDN = userDN.replace("测试,研发", "测试\\,研发");
userDN = userDN.replace("测试,研发", "测试\\=研发");
2、[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
这个错误很常见,如果你在开发过程中遇到这个错误,说明:AD认证的帐号或密码不正确;
顺便多说一些使用场景:
AD认证,帐号的格式有很多种:
如果帐号属性:
sAMAccountName = zhangsan
distinguishedName = CN=张三,OU=测试\+研发,OU=**公司,DC=test,DC=com
那么帐号认证的方式可以是:
adminUID的形式会有三种,这三种可能跟AD域控的系统版本有关系,windows2008这三种方式都是兼容的,其他的未经过测试,需要验证;
property.put(DirContext.INITIAL_CONTEXT_FACTORY, LDAPEnv_Factory);
// 拥有Domain Admins角色的用户,域管理员
// adminUID的值可以为:adminUID = CN=张三,OU=测试\+研发,OU=**公司,DC=test,DC=com
// adminUID的值可以为:adminUID = zhangsan@test.com
// adminUID的值可以为:adminUID = test\zhangsan
property.put(Context.SECURITY_PRINCIPAL, adminUID);
property.put(Context.SECURITY_CREDENTIALS, adminPass);
property.put(Context.SECURITY_AUTHENTICATION, "simple");
3、[LDAP: error code 53 - 0000001F: SvcErr: DSID-031A120C, problem 5003 (WILL_NOT_PERFORM), data 0
这个错误也很常见,出现这个错误,一般情况是编辑AD域控的帐号属性或密码失败了。
而失败的原因有以下可能:
1)通过ldapContext.modifyAttributes(userDN, mods);修改帐号密码,需要AD开通SSL协议才行(即:通过636端口进行执行),报上面的错误,是因为使用的389端口进行执行的;
体现到代码:
property.put("java.naming.authoritative", "true");
property.put("java.naming.security.protocol", "ssl");
// 如果大家需要SkipSSLSocketFactory.java,可以联系Q Q:2753538510
property.put("java.naming.ldap.factory.socket","com.***.jndi.directory.SkipSSLSocketFactory");
property.put("java.naming.provider.url", "ldaps://x.x.x.x:636");
property.setProperty("java.naming.referral", "ignore");
作为研发人员,在建立socket连接或http/https连接的时候,习惯性增加超时时间,而AD/LDAP的连接也会习惯性增加这段:
property.put("com.sun.jndi.ldap.connect.timeout", "5000");
那么增加这一行代码, 就会造成AD的SSL连接错误:
javax.naming.CommunicationException: x.x.x.x:636 [Root exception is java.net.SocketException: Unconnected sockets not implemented]
去掉上面一行,就可以了。
2)说一下如何开通AD侧的SSL协议:
windows2012 参考该链接:教程活动目录 - 通过 SSL 启用 LDAP [ 一步一步] (techexpert.tips)
windows2008的步骤如下:
1、打开:管理工具》服务器管理器
2、添加角色,勾选Active Directory 证书服务
图中我已经安装过了,因此会看到是灰色的; 注意:安装步骤跟windows 2012的稍微有一点差别;
3、安装完SSL,需要重启计算机,重启后,再次打开:管理工具》服务器管理器
可以看到目录里已经有证书服务了:
使用内置程序测试验证636端口是否正常:
Java对接AD/LDAP的常见错误,以及解决办法相关推荐
- php源码安装失败,php编译安装常见错误及解决办法
php编译安装常见错误及解决办法 1.configure: error: No curses/termcap library found 网上有的说法是:–with-named-curses-libs ...
- VS2019运行OpenGL时出现的常见错误及解决办法
OpenGL程序在低版本的VS中运行成功,但在VS2019中运行却出现各种错误,以下是常见错误的解决办法.(文章结尾有库的链接哟~) 问题一:无法打开文件"glaux.lib" 解 ...
- VLOOKUP常见错误及解决办法
35-VLOOKUP常见错误及解决办法 2021-08-18 13:11 VLOOKUP是一个非常实用的查找函数,但在实际使用过程中,往往会出现这样那种的错误而得到不正确的结果. [这里备注下,如果你 ...
- MATLAB等号错误为啥,Matlab常见错误及解决办法归纳
Matlab常见错误及解决办法归纳 1.Subscript indices must either be real positive integers or logicals 中文解释:下标索引必须是 ...
- php5编译安装常见错误和解决办法集锦
最近在给开发同事折腾开发测试环境,其中就有 php 的编译安装.由于每个人的需求不一致,所以也接触到了各种模块编译和集成,中间不乏各种编译依赖报错. 正好,搜了几次都是下面 2 篇文章内容,干脆就转到 ...
- Oracle的常见错误及解决办法
ORA-12528: TNS:listener: all appropriate instances are blocking new connections ORA-12528问题是因为监听中的服务 ...
- IIS发布ASP.NET应用常见错误及解决办法
常见错误 配置文件错误 具体错误类型为HTTP 错误 500.19 - Internal Server Error,错误描述为由于权限不足而无法读取配置文件. 该错误的可能原因是: 如同描述所说的,由 ...
- SSL证书7大常见错误及解决办法!
无论是初学者还是经验丰富的大佬,在购买和安装SSL证书时总会遇到各式各样的问题,那么在安装SSL证书都有哪些常见错误?在出现问题后该如何解决?以下是详细的内容: 错误一:域名验证失败 解决办法:请确认 ...
- Weblogic常见错误以及解决办法
特殊注意事项,在eclipse下最好采用和运行weblogic一样的jdk版本进行编译,否则会出现文件访问版本不一致的bug. 1)控制台报The WebLogic Server did not s ...
最新文章
- RHEL5.1单域主/从NIS服务器配置及测试
- jquery按钮禁用(全)
- 7.PHP Cookie与Session
- Teams bot的调用限制
- hive mysql5.7_安装并使用mysql5.7作为hive的metastore
- AndroidM 内核空间到用户空间接口类型
- 【Java从0到架构师】Filter_Listener_AJAX
- android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...
- 每天CookBook之Python-003
- 【pytorch】pytorch-LSTM
- 【声源定位】基于matlab广义互相关声源定位【含Matlab源码 548期】
- 全面了解决策管理平台
- NAT 内网穿透原理
- Juniper防火墙常用命令
- 连续仨月霸占牛客榜首京东T8呕心巨作:700页JVM虚拟机实战手册
- Android Couldn‘t find meta-data for provider with authority
- 云和恩墨校园招聘开始啦!
- Unix/Linux中的read和write函数
- 千锋教育python2104期总结day14
- go语言中goto的使用