第一次接触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.
LDAP 中DN、CN、DC的含义
转自: 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 组织单元中
|