1. 程式人生 > >java修改AD域使用者密碼使用SSL連線方式

java修改AD域使用者密碼使用SSL連線方式

正常情況下,JAVA修改AD域使用者屬性,只能修改一些普通屬性,

如果要修改AD域使用者密碼和userAccountControl屬性就得使用SSL連線的方式修改,

SSL連線的方式需要操作以下步驟:

1.安裝AD域證書服務

2.證書頒發機構中設定以web的方式獲取證書

3.訪問http://localhost/certsrv/下載證書檔案

4.將證書匯入開發電腦的C:\tmp目錄下,使用keytool -import -keystore命令

(以上步驟,在上一篇文章裡介紹了https://www.cnblogs.com/amoyzhu/p/9259264.html)

5.寫程式碼(注意埠是636)

package com.case.ldap;


import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

import com.cts.spring.boot.Main.Person;

/**
 * @Description:對AD域使用者的增刪改查操作
 * @author zhuyr
 * @date 2018-07-03
 */
public class ADDUser {
    //DirContext dc = null;
	LdapContext dc = null;
    String root = "OU=maad,DC=case,DC=com"; // LDAP的根節點的DC
    
    /**
     * @Description:程式入口
     * @author zhuyr
     * @date 2018-07-03
     */
    public static void main(String[] args) {
    	
    	ADDUser utils = new ADDUser();
    	
    	//0.使用者連線
    	//utils.init();
    	//1.新增使用者
    	//utils.add("testzhu");
    	
        //2.查詢組織單位下的所有使用者
    	//utils.searchInformation(utils.root); 
    	
    	//3.查詢組織單位下的某個使用者
        /*SearchResult sr = utils.searchByUserName(utils.root, "testzhu");
        System.out.println(sr.getName());*/

        //4.修改使用者屬性
        //utils.modifyInformation("testzhu", "M1380005");
        //utils.updatePerson("testzhu");
    	   	
    	//5.重新命名使用者
        //utils.renameEntry("CN=testzhu,OU=maad,DC=case,DC=com", "CN=testzzz,OU=maad,DC=case,DC=com");
        
    	//6.刪除使用者
        //utils.delete("CN=testzhu,OU=maad,DC=case,DC=com");
    	
    	
    	
    	utils.certinit();
    	//7.修改密碼失敗
        //utils.updatePWD("testzhu");
        utils.enablePerson("testzhu");
        //utils.searchInformation(utils.root); 
    	
        
        utils.close();
    }
    
    

    /**
     * @Description:使用帳戶密碼登入
     * @author zhuyr
     * @date 2018-07-03
     */
    public void init() {
        Properties env = new Properties();
        String adminName = "
[email protected]
";// [email protected] String adminPassword = "Root.123";// password String ldapURL = "ldap://172.16.160.7:389";// ip:port env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.SECURITY_AUTHENTICATION, "simple");//LDAP訪問安全級別:"none","simple","strong" env.put(Context.SECURITY_PRINCIPAL, adminName); env.put(Context.SECURITY_CREDENTIALS, adminPassword); env.put(Context.PROVIDER_URL, ldapURL); try { dc = new InitialLdapContext(env, null); System.out.println("AD域帳戶密碼認證成功"); } catch (Exception e) { System.out.println("AD域帳戶密碼認證失敗"); e.printStackTrace(); } } /** * @Description:使用SSl的方式登入 * @author zhuyr * @date 2018-07-03 */ public void certinit() { Properties env = new Properties(); String adminName = "cn=read-only-admin,cn=Users,dc=case,dc=com"; String adminPassword = "Root.123";// password String ldapURL = "ldap://172.16.160.7:636";// ip:port env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.SECURITY_AUTHENTICATION, "simple");//LDAP訪問安全級別:"none","simple","strong" env.put(Context.SECURITY_PRINCIPAL, adminName); env.put(Context.SECURITY_CREDENTIALS, adminPassword); env.put(Context.PROVIDER_URL, ldapURL); String keystore = "C:\\ProgramInstall\\Java\\jdk1.8.0_51\\jre\\lib\\security\\cacerts"; System.setProperty("javax.net.ssl.trustStore", keystore); env.put(Context.SECURITY_PROTOCOL, "ssl"); try { dc = new InitialLdapContext(env, null); System.out.println("AD域ssl身份認證成功"); } catch (Exception e) { System.out.println("AD域ssl身份認證失敗"); e.printStackTrace(); } } /** * @Description:關閉AD域服務連線 * @author zhuyr * @date 2018-07-03 */ public void close() { if (dc != null) { try { dc.close(); System.out.println("AD域服務連線關閉"); } catch (NamingException e) { System.out.println("NamingException in close():" + e); } } } /** * @Description:新增AD域使用者 * @author zhuyr * @date 2018-07-03 */ public void add(String newUserName) { try { Attributes attrs = new BasicAttributes(true); attrs.put("objectClass", "user"); attrs.put("samAccountName", newUserName); attrs.put("userPrincipalName", newUserName + "@mayocase.com"); //attrs.put("userAccountControl","66048"); //attrs.put("userPassword","Root.123"); attrs.put("telephoneNumber","15880277368"); attrs.put("displayName", "顯示名稱"); attrs.put("description","描述"); attrs.put("mail",newUserName + "@case.com"); attrs.put("givenName","名字"); attrs.put("name","newUserName"); attrs.put("cn", newUserName); attrs.put("sn", newUserName); dc.createSubcontext("CN=" + newUserName + "," + root, attrs); System.out.println("新增AD域使用者成功:" + newUserName); } catch (Exception e) { e.printStackTrace(); System.out.println("新增AD域使用者失敗:" + newUserName); } } /** * @Description:刪除AD域使用者 * @author zhuyr * @date 2018-07-03 */ public void delete(String dn) { try { dc.destroySubcontext(dn); System.out.println("刪除AD域使用者成功:" + dn); } catch (Exception e) { System.out.println("刪除AD域使用者失敗:" + dn); e.printStackTrace(); } } /** * @Description:重新命名AD域使用者 * @author zhuyr * @date 2018-07-03 */ public boolean renameEntry(String oldDN, String newDN) { try { dc.rename(oldDN, newDN); System.out.println("重新命名AD域使用者成功"); return true; } catch (NamingException ne) { System.out.println("重新命名AD域使用者失敗"); ne.printStackTrace(); return false; } } /** * @Description:修改AD域使用者屬性 * @author zhuyr * @date 2018-07-03 */ public void updatePerson(String dn) { Person person = new Person(); person.setCn("testzhu"); person.setsAMAccountName(person.getCn()); person.setName(person.getCn()); person.setSn("3"); person.setUserAccountControl("66048"); person.setTelephoneNumber("18506999958"); person.setGivenName("33"); person.setDescription("3333"); person.setDisplayName("333"); person.setMail("
[email protected]
"); person.setUserPassword("Root.123"); if (person == null || person.getCn() == null || person.getCn().length() <= 0) { return; } //修改的屬性 List<ModificationItem> mList = new ArrayList<ModificationItem>(); //不能修改 //mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("userAccountControl", person.getUserAccountControl()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("sn",person.getSn()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("telephoneNumber", person.getTelephoneNumber()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("mail", person.getMail()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("givenName", person.getGivenName()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("displayName", person.getDisplayName()))); mList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("description", person.getDescription()))); if (mList.size() > 0) { //集合轉為陣列 ModificationItem[] mArray = new ModificationItem[mList.size()]; for (int i = 0; i < mList.size(); i++) { mArray[i] = mList.get(i); } try { dc.modifyAttributes("cn="+dn + "," + root, mArray); System.out.println("修改AD域使用者屬性成功"); } catch (NamingException e) { System.err.println("修改AD域使用者屬性失敗"); e.printStackTrace(); } } } /** * @Description:修改AD域使用者密碼 * @author zhuyr * @date 2018-07-03 */ public void updatePWD(String dn) { Person person = new Person(); person.setCn("testzhu"); person.setUserPassword("Root.456"); String sOldPassword ="Root.123"; if (person == null || person.getCn() == null || person.getCn().length() <= 0) { return; } try { String oldQuotedPassword = "\"" + sOldPassword + "\""; byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE"); String newQuotedPassword = "\"" + person.getUserPassword() + "\""; byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE"); ModificationItem[] mods = new ModificationItem[2]; //mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd", newUnicodePassword)); mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("unicodePwd", oldUnicodePassword)); //userPassword mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword)); dc.modifyAttributes("cn="+dn + "," + root, mods); System.out.println("修改密碼成功!"); }catch(Exception e) { e.printStackTrace(); } } /** * @Description:修改AD域使用者屬性 * @author zhuyr * @date 2018-07-03 */ public void enablePerson(String dn) { Person person = new Person(); person.setCn("testzhu"); person.setUserAccountControl("66048"); if (person == null || person.getCn() == null || person.getCn().length() <= 0) { return; } try { ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("userAccountControl", person.getUserAccountControl())); dc.modifyAttributes("cn="+dn + "," + root, mods); System.out.println("啟用使用者成功!"); }catch(Exception e) { e.printStackTrace(); } } /** * @Description:搜尋指定節點下的所有AD域使用者 * @author zhuyr * @date 2018-07-03 */ public void searchInformation(String searchBase) { try { SearchControls searchCtls = new SearchControls(); searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); String searchFilter = "objectClass=user"; String returnedAtts[] = { "memberOf" }; searchCtls.setReturningAttributes(returnedAtts); NamingEnumeration<SearchResult> answer = dc.search(searchBase, searchFilter, searchCtls); while (answer.hasMoreElements()) { SearchResult sr = (SearchResult) answer.next(); System.out.println(sr.getName()); } } catch (Exception e) { e.printStackTrace(); } } /** * @Description:指定搜尋節點搜尋指定域使用者 * @author zhuyr * @date 2018-07-03 */ public SearchResult searchByUserName(String searchBase, String userName) { SearchControls searchCtls = new SearchControls(); searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); String searchFilter = "sAMAccountName=" + userName; String returnedAtts[] = { "memberOf" }; //定製返回屬性 searchCtls.setReturningAttributes(returnedAtts); //設定返回屬性集 try { NamingEnumeration<SearchResult> answer = dc.search(searchBase, searchFilter, searchCtls); return answer.next(); } catch (Exception e) { System.err.println("指定搜尋節點搜尋指定域使用者失敗"); e.printStackTrace(); } return null; } }

相關推薦

java修改AD使用者密碼使用SSL連線方式

正常情況下,JAVA修改AD域使用者屬性,只能修改一些普通屬性, 如果要修改AD域使用者密碼和userAccountControl屬性就得使用SSL連線的方式修改, SSL連線的方式需要操作以下步驟: 1.安裝AD域證書服務 2.證書頒發機構中設定以web的方式獲取證書 3.訪問http://localhos

AD 服務簡介(二)- Java 獲取 AD 用戶

set env red smo 關系數據庫 sign exception ini 性能 博客地址:http://www.moonxy.com 一、前言 先簡單簡單回顧上一篇博文中關於 AD 域和 LDAP目錄訪問協議的基本概念。 AD(Active Directory)活

如何解決Java通過JDBC訪問MySQL時SSL連線告警問題

背景 MySQL 5.5.45+, 5.6.26+, 5.7.6+開始支援SSL連線,如果沒有明確設定相關的選項時,預設要求SSL連線。為相容性考慮,舊應用程式需要設定verifyServerCert

使用JAVA控制AD進行基本的操作詳解

前段時間,我接到了一個新任務:使用JAVA控制AD域進行基本的操作。經幾天摸索也看來多位博友的程式碼,現在摸索出了一套較為詳細的Java操控AD域的方法。廢話不多說,現進入正題》》》 一、安裝域控伺服器 什麼是域控伺服器我就不多說了,請各位自行百度,安裝的教程在下面的連線裡

MySQL密碼相關,連線方式,常用命令

[toc] # MySQL密碼相關,連線方式,常用命令 擴充套件  mysql5.7 root密碼更改(較5.6版本變化大)   http://www.apelearn.com/bbs/thread-7289-1-1.html  myisam 和innodb引擎對比

Python 修改AD賬號密碼(二)- 修改賬號密碼

執行環境 Python 2.7.13 win32 ldap3 作業系統Win10 x64 ldap3 配置AD實驗環境 參考上一篇 搭建DC並配置LDAPS 新增測試賬號[email protected]密碼Abc123456

Python 修改AD賬號密碼(一)- 啟用控LDAPS

啟用LDAP over SSL 原文地址:https://gist.github.com/magnetikonline/0ccdabfec58eb1929c997d22e7341e45 實驗環境 AD域名example.com

加入AD的windows機器延長或者取消定期修改登入密碼

進入AD域控: 管理工具--》組策略管理--》林:skieer.cn--》域--》skieer.cn--》Default Domain Policy--》右鍵編輯--》計算機配置--》策略--》Windows設定--》安全設定--》賬戶策略--》密碼策略--》密碼最長使用期限--》右鍵屬性

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

最近要用java來修改windows 2003的Active Directory(簡稱AD)上的使用者,包括新增、修改、刪除,普通的操作這裡就不說了,網上有一大堆的資料,這裡記述一下本人操作過程中遇到的問題及解決方法。 通過ldap來修改AD的使用者資訊,除了修改密碼外,

JAVA使用Ldap操作AD

!= 多臺 com 登錄驗證 結果 ssl 服務器 不明確 tst 項目上遇到的需要在集成 操作域用戶的信息的功能,第一次接觸ad域,因為不了解而且網上其他介紹不明確,比較費時,這裏記錄下。 說明: (1). 特別註意:Java操作查詢域用戶信息獲取到的數據和域管理員在

ActiveMQ SSL應用之四 編寫Java Demo類使用SSL連線ActiveMQ

一、主要內容 在Eclipse平臺編寫Java Demo類使用SSL連線ActiveMQ,並進行簡單的報文傳送,接收,並使用wireshark抓包工具對報文進行抓取分析。 二、Demo類 1、訊息生產者 package example; import javax.jms.C

在泛微系統中修改AD密碼

-s 一個 itl windows 證書頒發機構 net image imp 中心 參照文檔: Windows server 2008 R2 安裝AD域證書:https://blog.csdn.net/zhuyongru/article/details/81107839 配

Python 修改AD賬號密碼(三)- 簡易網頁版

準備環境 AD域test.com 啟用LDAPS python 2.7 效果預覽 下載程式碼 https://download.csdn.net/download/leoforbest/10426133 下載完畢安裝依賴環

AD環境取消密碼複雜度和密碼使用期限

本地組策略功能中設定密碼永不過期的時候發現功能置灰了,不能設定:           這是因為建立域後預設本地組策略功能會被轉移到域組策略管理裡面,所以我們可以去組策略管理器裡去更改組策略,因為一般本地策略的優先級別最低,他會被域的密碼策略立即覆蓋!    執行"win+R",輸入“gpm

AD環境取消密碼復雜度和密碼使用期限

默認 domain alt pmc 策略管理 使用 bubuko line lin 本地組策略功能中設置密碼永不過期的時候發現功能置灰了,不能設置:           這是因為創建域後默認本地組策略功能會被轉移到域組策略管理裏面,所以我們可以去組策略管理器裏去更改

如何更改AD安全策略-密碼必須符合複雜性要求

通常我們在域系統-管理工具上面是找不到“域安全策略”的,我們只能找到“本地安全策略”,而更改“本地安全策略”是不會對域產生任何的作用的。下面這個步驟教你如何找到“域安全策略”(不要相信在“Active Directory 使用者和計算機”中域名的那上面點右鍵→屬性可以找這

Windows Server 2012 Web方式修改使用者密碼-通過Remote Desktop Web實現

1.在Windows Server 2003上,作業系統預設提供了一種修改域使用者密碼的方式 2.在Windows Server 2008上,可以提取Windows Server 2003上的程式碼來實現相同的功能 3.在Windows Server 2012上,提供了一種

java 修改mysql密碼的四種方法

方法1: 用SET PASSWORD命令首先登入MySQL。 格式:mysql> set password for 使用者名稱@localhost = password('新密碼'); 例子:mysql> set password for [email 

java 根據OU獲取Windows的AD賬戶

import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; im

JAVA LADP獲取AD使用者列表資訊

import java.util.Enumeration; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import jav