第一次接觸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 組織單元中
