Ldap 修改用户密码及安装证书

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

java 2009-05-06 11:00:27 阅读135 评论0 字号:

JAVA使用LDAP修改windows Active Directory 域用户密码
liaowufeng 原创   更新:2005-12-12 13:53:38  版本: 1.0   

 

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

作者:廖武锋

MSN:[email protected]

QQ: 38773367

email: [email protected]

本人为作者原创,若转贴,请保留作者署名,谢谢!

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. }

 

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

你可能感兴趣的:(LDAP)