java使用ldap修改ad域用户密码

java使用ldap修改ad域用户密码
java使用ldap修改ad域用户密码

1 注意:

1. LDAP 无法获取window s Active Directory 用户密码

2. 系统管理员可以修改其他用户的密码(不需要知道原来的旧密码),或者用户可以修改自己的密码(用户必须知道自己的密码)。这些密码修改操作必须通过一个安全通道来执行,象SSL、TLS、Kerberos。

3. Windows 2000 域控制器不支持TLS协议。但是Windows 2000 和Window s Server 2003 域控制器都支持SSL。对基于SSL或TLS的会话,你的工作站(或指定的JRE)必须信任域控制器认证中心发布的CA证书。

相关资料可到https://www.360docs.net/doc/eb3634506.html,网站在看

具体步骤如下:

环境要求:

一台安装Active Directory 的服务器,域名为security.boco

一台安装证书服务(需安装企业根证书)的服务器,此服务器加入security域中

一台安装JAVA应用的服务器,此服务器不需要加入security域中

安装步骤:

1 安装Active Directory 域控制器

2 安装证书服务

3 以域用户登录到安装了证书服务的服务器中,导出域根证书和计算机证书

第一步:进入MMC控制台,添加证书,选择本地计算机

d1.jpg

dc1.jpg

进入MMC 控制台

dm1.jpg

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

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

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

xz.jpg

xz2.jpg

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 域用户密码

public static void main(String[] args) throws UnknownHostException,

IOException {

// https://www.360docs.net/doc/eb3634506.html,.Socket sock = new https://www.360docs.net/doc/eb3634506.html,.Socket("10.110.180.50",636);

// boolean b = sock.isConnected();

Hashtable env = new Hashtable();

String adminName = "cn=administrator,cn=users,DC=security,DC=boco";

String adminpassword = "123456789";

String userName = "CN=iam_lwf_count,OU=网管中心,DC=security,DC=boco";

// old password Ab123456

String newPassword = "liaowufeng";

String keystore = "D:/Borland/jdk142_05/bin/security51.keystore";

// String keystore = "E:/project/iam/testADlhj.keystore";

System.setProperty("https://www.360docs.net/doc/eb3634506.html,.ssl.trustStore", keystore);

System.setProperty("https://www.360docs.net/doc/eb3634506.html,.ssl.trustStorePassword", "lwfmah");

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

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

env.put(Context.SECURITY_PRINCIPAL, adminName);

env.put(Context.SECURITY_CREDENTIALS, adminpassword);

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

String ldapURL = "ldaps://10.110.180.50:636";

env.put(Context.PROV IDER_URL, ldapURL);

try {

LdapContext ctx = new InitialLdapContext(env, null);

ModificationItem[] mods = new ModificationItem[1];

String newQuotedPassword = "\"" + newPassword + "\"";

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

mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd",newUnicodePassword));

ctx.modifyAttributes(userName, mods);

System.out.println("Reset Password for: " + userName);

ctx.close();

System.out.println("Problem encoding password222: ");

} catch (Exception e) {

e.printStackTrace();

System.out.println("Problem encoding password222: " + e);

}

}

相关主题
相关文档
最新文档