JAVA通过SSL修改MS AD账户密码

我们上一篇文章介绍了JAVA通过SSL创建MS AD账户及设置密码,今天我们主要介绍JAVA通过SSL修改MS AD账户密码,关于证书介绍,我们上一篇已经介绍了,所以直接进入重点,上代码

我们准备修改上一篇介绍时创建的gaowenlong这个账户;

我们设置修改密码的账户

上代码

package com.ixmsoft.oa.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class UpdatePasswordTLS {   
    public static void main (String[] args)   
    {   
       
        Hashtable env = new Hashtable();   
        String adminName = "CN=Administrator,CN=Users,DC=ixmsoft,DC=com";   
        String adminPassword = "123";   
        String userName = "CN=zhushizhen,OU=IXM Adm,OU=IMXSOFT Users,DC=ixmsoft,DC=com";
        String newPassword = "123456";   
           
        String keystore = "D:\\Development_Environment\\java\\jdk\\jre\\lib\\security\\cacerts";   
        System.setProperty("javax.net.ssl.trustStore",keystore);   
           
        //Access the keystore, this is where the Root CA public key cert was installed   
        //Could also do this via command line java -Djavax.net.ssl.trustStore....   
        //String keystore = "/usr/java/jdk1.5.0_01/jre/lib/security/cacerts";   
        //System.setProperty("javax.net.ssl.trustStore",keystore);   
    
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");   
    
        //set security credentials, note using simple cleartext authentication   
        env.put(Context.SECURITY_AUTHENTICATION,"simple");   
        env.put(Context.SECURITY_PRINCIPAL,adminName);   
        env.put(Context.SECURITY_CREDENTIALS,adminPassword);   
        env.put(Context.SECURITY_PROTOCOL,"ssl");   
    
        //connect to my domain controller   
        String ldapURL = "ldap://192.168.5.20:636";   
        env.put(Context.PROVIDER_URL,ldapURL);   
           
        try {   
    
//           Create the initial directory context   
            LdapContext ctx = new InitialLdapContext(env,null);   
           
            //set password is a ldap modfy operation   
            ModificationItem[] mods = new ModificationItem[1];   
    
            //Replace the "unicdodePwd" attribute with a new value   
            //Password must be both Unicode and a quoted string   
            String newQuotedPassword = "\"" + newPassword + "\"";   
            byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");   
    
            //注意:如果是当前用户自行修改密码,需要先删除oldpassword,然后在添加新的password   
            /*  
            ModificationItem[] mods = new ModificationItem[2];  
            //Firstly delete the "unicdodePwd" attribute, using the old password  
            //Then add the new password,Passwords must be both Unicode and a quoted string   
            String oldQuotedPassword = "\"" + sOldPassword + "\"";  
            byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE");  
            String newQuotedPassword = "\"" + sNewPassword + "\"";  
            byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");  
            mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute("unicodePwd", oldUnicodePassword));  
            mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));  
            // Perform the update  
            ctx.modifyAttributes(sUserName, mods);  
            */  
               
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));   
    
            // Perform the update   
            ctx.modifyAttributes(userName, mods);   
           
            System.out.println("Reset Password for: " + userName);     
            ctx.close();   
  
    
        }    
        catch (NamingException e) {   
            System.out.println("Problem resetting password: " + e);   
        }   
        catch (UnsupportedEncodingException e) {   
            System.out.println("Problem encoding password: " + e);   
        }   
        catch (IOException e) {   
            System.out.println("Problem with TLS: " + e);   
        }   
    
    }   
  
}

开始执行

我们最后看看结果

时间: 2024-08-30 04:11:19

JAVA通过SSL修改MS AD账户密码的相关文章

JAVA通过SSL证书创建MS AD账户及设置密码

近期由于工作需要整理一下自动化的东西,因为公司去年上线了OA,所以公司的入职系统会提交用户的信息到IT部门,最早的做法是入职到了,IT部门收集用户信息在AD中创建对应的用户信息,所以为了提高管理员的工作效率,所以准备实施自动创建AD账户,当OA流程到IT人员审批节点后,IT人员审批后根据人员信息自动创建AD账户,所以整理了一些JAVA创建AD人员信息的信息,但是我们需要注意点的是,对于JAVA语言操作MS AD的一些普通操作是不需要SSL的,但是对于用户密码的重置操作必须使用SSL,当然之前看网

通过JAVA开发的修改AD用户的工具,修改AD用户密码时报错

今天遇到1个用户反馈的问题,他们通过JAVA开发了一个工具(修改AD用户密码),在此工具中如果将LDAP指向1台辅助DC时就报错,详细信息如下: 问题描述: ========= 通过JAVA开发的修改AD用户密码的工具,LDAP指向1台辅助域控时,修改用户密码报错,JAVA上报错如下: javax.naming.CommunicationException: simple bind failed: 10.10.10.23:636 [Root exception is javax.net.ssl.

检测AD账户密码过期时间并通知

我记得在坛子里流传这一份用PS1.0版本实现此功能的脚本本来想直接使用,但居然发现不会用呵呵. 后来一想直接写一个得了,此脚本主要实现了两个功能 : 一能判断账户密码的过期时间并通过邮件通知到账户,二是将这些即将过期的账户信息累计通知到管理员. ############################################ #Author:Lixiaosong #Email:[email protected];[email protected] #For:检测AD密码过期时间并邮件通知

修改添加的账户密码

如何生成加密的密码 grub-md5-crypt [[email protected] ~]# grub-md5-crypt  Password:  Retype password:  $1$zUV8p1$pWr5yZnJ1ndOBuTfL8Q6b/ or echo "xansun" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin $1$wEBIWQRP$Jl02

用powershell脚本自动阻止OWA爆破AD账户密码

This artical will also be published in English: http://www.cnblogs.com/LarryAtCNBlog/p/4820327.html 以前所在的公司OWA什么的都不对外开放倒是从来没有经历过利用Exchange OWA的AD账户密码爆破行为,入职了一个新的公司后OWA对公网开放使用,结果引来了不少的攻击.于是乎做了一个powershell的脚本,数据源基于Exchange CAS上的security日志,用计划任务每10分钟检查一

java读取pdf和MS Office文档

有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:FontBox是一个处理PDF字体的java类库:JempBox是一个处理XMP元数据的java类库. 一个简单示例: 要引入pdfbox-app-1.6.0.jar这个包. package pdf; import java.io.File;import java.net.MalformedURLExcep

java web项目修改项目名称

前几天在网上下了个项目,感觉名字长,所以想把项目改名字. 把项目导入到myeclipse中,将项目改名后, 还需要选中项目右键,properties ,修改项目的Context Root的名字. java web项目修改项目名称

Android 如何在java/native层修改一个文件的权限(mode)与用户(owner)?

前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 [Description] 如何在java/native层修改一个文件的权限(mode),用户(owner),组(group),以满足安全需要? [Keyword] 文件权限 文件用户 mode owner chomd chown permission [Solution] 在nativ

在Windows Server 2008 R2中使用web方式修改域用户账户密码

在Windows的domain环境下,加域的客户端修改账户密码是一件很easy的事情:即使没有加域的客户端如果组织中,使用Exchange邮件系统,借助Exchange的owa也可以轻松修改账户密码. 前段时间搞Web+Portal 认证时,由于存在少量的LDAP用户,该Web+Portal认证不支持AD+LDAP双认证.为了让这部分用户也能够实现认证,采用了域名+用户名(避免和域用户重名)的方式导进了AD中,并设置了初始密码.可是问题也出现了,这部分用户不加域也没有Exchange邮箱,如何才