JAVA 操作 LDAP AD域修改密码报错及解决问题记录 simple bind failed:IP:PORT

第一次接触ad域操作,搞了一天。终于完成。感谢以下博客主的知识分享。

主要遇到的问题:

simple bind failed:IP:PORT

connect reset 等。

主要解决指导为:

1. 修改AD的 init 方法初始化 InitialLdapContext 时使用的账号密码,必须是AD域的管理员账号密码。

    如果不是管理员账号,会报53 的错。

2. JAVA 修改AD密码必须是要用证书的。

3. 证书中的【颁发给/ 使用者】 必须是 AD域服务器那台机器的域名。如下第3点博客内容。

  如果这名不对,即使有证书,也是连不上ad服务器的, 报 connect reset 的错。或者其他错误

主要参考:

1. 测试登陆认证。

Java使用AD域认证用户_酱油能码丁-CSDN博客

https://blog.csdn.net/martinwangjun/article/details/79729749?utm_source=blogxgwz2

2. 测试修改AD密码。

记一次java实现修改windows AD域的密码_lx318的博客-CSDN博客

https://blog.csdn.net/lx318/article/details/90199569

AD域证书申请,导入Java密钥库,实现ldap修改AD用户密码_寒沨的博客-CSDN博客

https://blog.csdn.net/hc1017/article/details/81293323

3. Java采用SSL连接AD域连接出错问题simple bind failed:IP:PORT解决方案

https://blog.csdn.net/hct368/article/details/97247258

4. 报错信息参考:

private static String getERR(Exception e) {

/*

*

* 根据ldap返回码判断错误原因并返回

*

*/

if (e.toString().indexOf("LDAP: error code") > 0) {

// 得到ldap返回的错误吗

String errorMsg = e.toString();

int startNum = errorMsg.toString().indexOf("LDAP: error code") + 17;

errorMsg = errorMsg.substring(startNum, startNum + 19);

int endNum = errorMsg.toString().indexOf(" - ");

errorMsg = errorMsg.substring(0, endNum);

if ("49".equals(errorMsg)) {

errorMsg = "域控管理员账户/密码错误";

} else if ("32".equals(errorMsg) || "34".equals(errorMsg)) {

errorMsg = "域内账户错误";

} else if ("10".equals(errorMsg)) {

errorMsg = "dc错误";

} else {

errorMsg = "修改失败,错误吗:" + errorMsg;

e.printStackTrace();

}

System.out.println("Problem resetting password(ldap):" + errorMsg);

return errorMsg;

} else {

if (e.toString().indexOf(

"algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext") > 0) {

System.out.println("Problem resetting password(ldap):" + "证书无效/证书密码错误");

return "修改失败,证书无效/证书密码错误";

}

if (e.toString().indexOf(

"the trustAnchors parameter must be non-empty") > 0) {

System.out.println("Problem resetting password(ldap):" + "证书不存在");

return "修改失败,证书不存在";

}

e.printStackTrace();

return "修改失败!";

}

}

5.

转自: https://blog.csdn.net/a118170653/article/details/43449331

很多人虽然会使用dsadd等命令添加用户,但是dsadd的命令说明里面并没有涉及到dc,cn,ou的含义,很多人都不明白,这里是微软的技术支持人 员的回信,希望对大家有帮助。

CN, OU, DC 都是 LDAP 连接服务器的端字符串中的区别名称(DN, distinguished name)

LDAP连接服务器的连接字串格式为:ldap://servername/DN

其中DN有三个属性,分别是CN,OU,DC

LDAP是一种通讯协议,如同HTTP是一种协议一样的!

在 LDAP 目录中,

  • DC (Domain Component)
  • CN (Common Name)
  • OU (Organizational Unit)

LDAP 目录类似于文件系统目录。

下列目录:

DC=redmond,DC=wa,DC=microsoft,DC=com

如果我们类比文件系统的话,可被看作如下文件路径:

Com/Microsoft/Wa/Redmond

例如:CN=test,OU=developer,DC=domainname,DC=com

在上面的代码中 cn=test 可能代表一个用户名,ou=developer 代表一个 active directory 中的组织单位。这句话的含义可能就是说明 test 这个对象处在domainname.com 域的 developer 组织单元中