JR 精品文章 - JAVA使用LDAP修改windows Active Directory 域用户密码
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2EE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
JAVA使用LDAP修改windows Active Directory 域用户密码
liaowufeng 原创   更新:2005-12-12 13:53:38  版本: 1.0   

JAVA使用LDAP修改windows Active Directory 域用户密码


作者:廖武锋

MSN:liaowufeng1111@hotmail.com

QQ: 38773367

email: moaihe1111@163.com

本人为作者原创,若转贴,请保留作者署名,谢谢!
1 注意:
1. LDAP 无法获取windows Active Directory 用户密码
2. 系统管理员可以修改其他用户的密码(不需要知道原来的旧密码),或者用户可以修改自己的密码(用户必须知道自己的密码)。这些密码修改操作必须通过一个安全通道来执行,象SSL、TLS、Kerberos。
3. Windows 2000 域控制器不支持TLS协议。但是Windows 2000 和 Windows Server 2003 域控制器都支持SSL。对基于SSL或TLS的会话,你的工作站(或指定的JRE)必须信任域控制器认证中心发布的CA证书。

相关资料可到www.ldapchina.com网站在看

具体步骤如下:
环境要求:
一台安装Active Directory 的服务器,域名为security.boco
一台安装证书服务(需安装企业根证书)的服务器,此服务器加入security域中
一台安装JAVA应用的服务器,此服务器不需要加入security域中
安装步骤:
1 安装Active Directory 域控制器
2 安装证书服务
3 以域用户登录到安装了证书服务的服务器中,导出域根证书和计算机证书
  第一步:进入MMC控制台,添加证书,选择本地计算机


进入MMC 控制台



添加证书管理单元,选择本地计算机


  第二步展开刚增加的证书节点,选择证书个人->证书,选择CA证书,导出



  第三步展开证书节点,选择证书个人证书 ,右击所有任务,申请新证书,证书类型选择计算机类型







4 将从证书中导出的两个证书文件,*.cer 使用java的keytool工具创建或导入证书库文件中


导入CA证书
D:\Borland\jdk142_05\bin>keytool -import -keystore security51.keystore -file 51A
Droot.cer
输入keystore密码:  lwfmah
Owner: CN=securityCA, DC=security, DC=boco
发照者: CN=securityCA, DC=security, DC=boco
序号: 72880fb3005cd7a54efa9c224241008b
有效期间: Thu Nov 10 20:48:49 CST 2005 至: Tue Nov 10 20:55:33 CST 2015
认证指纹:
         MD5:  51:3F:C3:B1:C3:A6:EF:24:55:70:2A:25:0D:EB:57:59
         SHA1: B3:EE:CC:92:E3:D4:87:48:D4:1D:F3:53:5B:0E:99:E1:B7:0F:27:20
信任这个认证? [否]:  y
认证已添加至keystore中

导入申请的计算机证书
D:\Borland\jdk142_05\bin>keytool -import -keystore security51.keystore -alias co
mkey -file 51AD.cer
输入keystore密码:  lwfmah
认证已添加至keystore中

5 编写如下代码修改Active Direcotry 域用户密码

 
  1.  
  2. public static void main(String[] args) throws UnknownHostException,
  3.             IOException {
  4. // java.net.Socket sock = new java.net.Socket("10.110.180.50",636);
  5. // boolean b = sock.isConnected();
  6.   Hashtable env = new Hashtable();
  7.   String adminName = "cn=administrator,cn=users,DC=security,DC=boco";
  8.   String adminpassword = "123456789";
  9.   String userName = "CN=iam_lwf_count,OU=网管中心,DC=security,DC=boco";
  10.  // old password Ab123456
  11.   String newPassword = "liaowufeng";
  12.   String keystore = "D:/Borland/jdk142_05/bin/security51.keystore";
  13.  //  String keystore = "E:/project/iam/testADlhj.keystore";
  14. System.setProperty("javax.net.ssl.trustStore", keystore);
  15.   System.setProperty("javax.net.ssl.trustStorePassword""lwfmah");
  16.         env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
  17.         env.put(Context.SECURITY_AUTHENTICATION, "simple");
  18.         env.put(Context.SECURITY_PRINCIPAL, adminName);
  19.         env.put(Context.SECURITY_CREDENTIALS, adminpassword);
  20.         env.put(Context.SECURITY_PROTOCOL, "ssl");
  21.         String ldapURL = "ldaps://10.110.180.50:636";
  22.         env.put(Context.PROVIDER_URL, ldapURL);
  23.         try {
  24.             LdapContext ctx = new InitialLdapContext(env, null);
  25.             ModificationItem[] mods = new ModificationItem[1];
  26.             String newQuotedPassword = "\"" + newPassword + "\"";
  27.             byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
  28.             mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd",newUnicodePassword));
  29.             ctx.modifyAttributes(userName, mods);
  30.             System.out.println("Reset Password for: " + userName);
  31.             ctx.close();
  32.              System.out.println("Problem encoding password222: ");
  33.         } catch (Exception e) {
  34.             e.printStackTrace();
  35.             System.out.println("Problem encoding password222: " + e);
  36.         }
  37. }


还有什么不明白或者实践碰到什么问题,欢迎加我共同进步.

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     7       1
作者其它文章: 作者全部文章     查看作者的Blog

这个文章共有 0 条评论
主题: 数据库建模工具PowerDesigner使用总结 上一篇文章
返回文章列表 返回〔J2EE综合〕
下一篇文章 主题: Web应用开发,如何使用JSTL 标签做页面资源国际化


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号