JAVA修改AD账号密码

今天正好做了这块,拿出来分享。以前在网上找到的都无法实现。代码内容不太规范,只是一个测试的用例

有什么问题可以联系我QQ:305493325。

一、生成JKS文件

1、下载AD域的根证书,访问https://10.1.0.10:636 (需要IE6导出根证书)。只需要根证书;

2、生成JKS。使用KEYTOOL工具生成

新建KeyStore

(图片内容参考附件)

选择KeyStore的类型

(图片内容参考附件)

点击保存后,输入KeyStore的密码

(图片内容参考附件)

导入根证书

(图片内容参考附件)

下一步后输入证书的别名

(图片内容参考附件)

成功后,点击保存,JKS生成完成

(图片内容参考附件)

二、编写代码

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Hashtable;

import javax.naming.Context;

import javax.naming.NamingEnumeration;

import javax.naming.NamingException;

importjavax.naming.directory.BasicAttribute;

import javax.naming.directory.DirContext;

importjavax.naming.directory.InitialDirContext;

importjavax.naming.directory.ModificationItem;

import javax.naming.directory.SearchControls;

import javax.naming.directory.SearchResult;

public class AdOpration {

private String ldapUser = "";

private String ldapPwd = "";

private String ldapUrl = "";

private String baseDN = "";

private DirContext dc = null;

public AdOpration(String baseDN,String ldapUser ,String ldapPwd ,StringldapUrl) {

this.baseDN = baseDN;

this.ldapUser = ldapUser;

this.ldapPwd = ldapPwd;

this.ldapUrl = ldapUrl;

this.dc = this.getADContext();

}

/**得到连接的上下文 */

public DirContext getADContext(){

Hashtable<Object, Object> env = new Hashtable<Object,Object>();

String trustStore = "c:/test-ad-key.jks"; //JKS存放的位置

String trustStorePwd = "123456";  // JKS密码

System.setProperty("javax.net.ssl.trustStore", trustStore);

System.setProperty("javax.net.ssl.trustStorePassword",trustStorePwd);

env.put(Context.SECURITY_PROTOCOL, "ssl");

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.SECURITY_AUTHENTICATION, "simple");

env.put(Context.SECURITY_PRINCIPAL, ldapUser);

env.put(Context.SECURITY_CREDENTIALS, ldapPwd);

DirContext ctx=null;

try {

env.put(Context.PROVIDER_URL, ldapUrl);

ctx = new InitialDirContext(env);

}catch (NamingException e) {

e.printStackTrace();

}

return ctx;

}

/**

* 查询ldapDN

*/

public String getAccountDNByName(String username) {

String accountDN = "";

try {

SearchControls constraints = new SearchControls();

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

String filter = "(&(objectClass=user)(samaccountname=" +username + "))";

NamingEnumeration en = dc.search(baseDN, filter,constraints);

System.out.println("filter="+filter);

while (en.hasMoreElements()) {

SearchResult rs=(SearchResult)en.nextElement();

accountDN=rs.getName()+","+baseDN;

}

}catch(Exception e) {

}

return accountDN;

}

/**

* 关闭Ldap连接*/

public void closeLdap() {

try {

this.dc.close();

}catch (NamingException e) {

}

}

/**修改AD密码*/

public boolean changePwd(String userName,String pwd){

boolean flag = false;

ModificationItem[] mods = new ModificationItem[1];

String newQuotedPassword = "\"" + pwd +"\"";

try {

byte[] newUnicodePassword =newQuotedPassword.getBytes("UTF-16LE");

mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,

new BasicAttribute("unicodePwd", newUnicodePassword));

this.dc.modifyAttributes(userName, mods);

flag = true;

}catch (Exception e) {

flag = false;

}

return flag;

}

public static void main(String arg[]){

String ldapUser = "siamtest@contoso.org"; //一定需要管理员的权限

String ldapPwd = "abcd.1234";

String ldapUrl = "ldaps://10.1.0.10:636"; // 连接的URL,必须使用ldaps

String username = "dgcaiym.gdsy";  //被修改人员的AD账号

String userPwd = "P@ssw0rd";

String baseDN = "DC=contoso,DC=org"; // AD组织的baseDN

AdOpration adOperation = new AdOpration(baseDN,ldapUser,ldapPwd,ldapUrl);

String dn = adOperation.getAccountDNByName(username);

System.out.println("==========User DN==========="+dn);

boolean flag = adOperation.changePwd(dn, userPwd);

System.out.println("==========ChangePassword==========="+flag);

adOperation.closeLdap();

}

}

注意:

1、  首先确保连接上,能够查询AD账号的DN后,表示JKS都没有问题;

2、  报“problem5003 (WILL_NOT_PERFORM)”错误时,表示当前的密码不符合AD密码策略;

3、  测试发现,当账号挂在OU=组织机构,DC=contoso,DC=org下时,修改成功但实际没有修改成功,必须在OU=组织机构,DC=contoso,DC=org以下的节点下。

JAVA修改AD账号密码相关推荐

  1. Powershell管理系列(二十八)PowerShell操作之修改AD账号密码

    -----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 有一群友问,我有一个表格,里面有 ...

  2. Python 修改AD账号密码(二)- 修改域账号密码

    运行环境 Python 2.7.13 win32 ldap3 操作系统Win10 x64 ldap3 配置AD实验环境 参考上一篇 搭建DC并配置LDAPS 添加测试账号leo@example.com ...

  3. Python 修改AD账号密码(三)- 简易网页版

    准备环境 AD域test.com 启用LDAPS python 2.7 效果预览 下载代码 https://download.csdn.net/download/leoforbest/10426133 ...

  4. Python 修改AD账号密码(一)- 启用域控LDAPS

    启用LDAP over SSL 原文地址:https://gist.github.com/magnetikonline/0ccdabfec58eb1929c997d22e7341e45 实验环境 AD ...

  5. 通过web修改AD账号密码(无需第三方工具)

    1.在自己Service上安装IIS服务,具体操作看下图. 二.安装完成后,在管理工具找到IIS管理器. 改为TRUE即可. 访问路径 http://localhost/RDWeb/Pages/zh- ...

  6. C#修改AD账号及密码

    在使用AD域环境搭建的账号系统修改密码的时候比较麻烦一般需要管理员在域环境去进行对用户的密码进行修改. 以下就是用来查询和修改AD域密码的方法. 1 /// <summary>2 /// ...

  7. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  8. idea修改git账号密码

    idea修改git账号密码 一.方法1 1.在Terminal中输入git config user.name获取当前的用户名 2.打开控制面板–>用户账户–>凭证管理器–>windo ...

  9. 【mongoDB】mongoDB批量修改业务账号密码

    一.背景 1.需要将已有业务数据的复制集 replSet01 数据都导入到 新搭建的复制集replSet02 中 2.新搭建的复制集replSet02  超管用户密码跟源复制集replSet01 的密 ...

最新文章

  1. _splitpath,_makepath分析路径
  2. 【深度学习】270篇CVPR 2020代码开源的论文,全在这里了!
  3. 【原】概率论——第一章第1节
  4. MFC通过对话框窗口句柄获得对话框对象指针
  5. 请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇
  6. java定义接口规范_关于java的接口的一些规范
  7. selenium学习过程中遇到的问题
  8. python获取文件修改时间与创建时间
  9. dubbo几种协议_Dubbo面试(简)
  10. python服务器搭建qt搭建客户端_利用PythonQT,定制服务器启动工具
  11. php中去除数组中空值,php如何去除数组中空值
  12. C语言趣味小游戏——扫雷(详解版)
  13. Windows上搭建SFTP服务器
  14. linux 开源oa系统,linux版64位免费OA办公系统4.17
  15. ROC曲线下面积为什么越大越好 (TPR FPR)
  16. 网络通信,IP地址, 端口,socket
  17. 转载:老师也吐血的试卷
  18. 万由u-nas系统用上Let’s Encrypt 免费Https安全证书
  19. java转大数据的学习路线
  20. 【图像配准】SIFT图像配准【含Matlab源码 1007期】

热门文章

  1. PVS更新与合并vdisk版本
  2. JS escape()和unescape()函数的介绍
  3. Unity中 利用Line Renderer || Trail Renderer制作飘烟拖尾
  4. DELMIA软件:机器人仿真动画视频生成功能介绍与使用方法
  5. simple-uploader前端分片上传文件
  6. 妙味课堂H5音乐播放器实战视频课程 ajax实战教程
  7. android 获取屏幕的物理尺寸
  8. web文本编辑器php源码,超级轻量web富文本编辑器HandyEditor
  9. 【机器学习笔记】可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning)
  10. ios 专业制作马甲包、解决审核不通过的各种疑难杂症