1. 程式人生 > >用JAVA通過LDAP修改AD使用者密碼注意事項

用JAVA通過LDAP修改AD使用者密碼注意事項

最近要用java來修改windows 2003的Active Directory(簡稱AD)上的使用者,包括新增、修改、刪除,普通的操作這裡就不說了,網上有一大堆的資料,這裡記述一下本人操作過程中遇到的問題及解決方法。
通過ldap來修改AD的使用者資訊,除了修改密碼外,其他的都可以使用非安全的連線進行操作,也就是可以不走SSL連線來操作,注意AD的普通埠是389,SSL埠是636。
當使用SSL連線修改密碼時,需要在連線端安裝證書,怎麼獲取證書,本人使用網上其他人介紹的證書方法,全是無法成功,都是出現 unable to find valid certification path to requested target 錯誤,最終經一朋友提示,使用其他方法獲取到正確的證書,具體如下:
1、安裝證書服務。最好不要在域控制器上安裝證書服務,而是使用另外一臺機器加入到域中,且在這臺機器上使用域賬戶來安裝證書服務。證書服務的安裝沒什麼特別的注意,請參考其他人的文章。

2、獲取客戶端證書。別人都是通過下載證書的方式來獲取證書,但是我通過這種方式就是無法成功修改密碼,也都是提示 unable to find valid certification path to requested target 這個錯誤。我的操作方法為,用IE通過SSL直接連線ldap伺服器(也就是安裝AD的那臺機器),使用636埠,類似於 https://192.168.0.111:636 ,連線的時候會提示安裝證書,這時候把這個證書儲存下來,即為需要的客戶端證書。

3、連線。得到證書後,我在連線的時候成功了,但在修改AD使用者密碼的時候還是報錯,但這次的錯誤為 javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000052D: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0 ,操作不支援錯誤,在這個問題了轉了好久都沒解決,後來無意中看到一篇文章講到AD中的密碼策略問題,才想起來windows2003中AD中的預設密碼策略有長度限制和複雜性要求,所以才導致出現OperationNotSupportedException異常,記得在域控制器上檢視自己的域策略。

後記:由於水平原因,就因為證書的問題搞了兩天多才搞定,其實通過調整域策略可以使用修改密碼不需要走SSL通道的,但這都是旁門左道,希望寫下這篇文章對大家有所幫助。