java对AD域的密码修改!!证书导入!!!

来源:互联网 发布:linux查看语言 编辑:程序博客网 时间:2024/04/29 04:47

最近公司要用Java进行AD操作,其他操作都能实现,网上都能找得到。

但就是关于密码的修改,还有用户的启用操作不能用。

后来得知需要安装证书!导入证书!使用SSL协议!

网上这方面的资料也很多,但是东拉西扯,说也说不明白,怎么操作都不行,让我搞了好几天,最后还是搞出来了,为了不让大家再受困扰,我将一些关键和重点的内容总结,如下:

如果仍然不能使用,可以给我Email:lizjohn@sina.com,希望真的能帮助你们:

另外,希望大家关注我的淘宝网店:http://shop105533306.taobao.com/?spm=0.0.0.0.8jr4dx,你的关注是我前进的动力,谢谢!

微软认为密码是ad中的最核心属性,所以修改密码与修改其他属性都不一样!需要安装证书!使用SSL协议


server 2008 用户相关操作可参考:

http://wenku.baidu.com/view/d49c0ec5aa00b52acfc7ca53.html

http://wenku.baidu.com/view/91fad77b5acfa1c7aa00ccbc.html

1.在服务端安装完证书(安装是尽量完全的安装,把能选的复选框全勾上,不然很可能证书不能使用),将证书复制到本地的任何一个路径,如:D:\。

2.接下来通过MyEclipse 的bin(如:D:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin)目录下的keytool.exe工具,将其复制到C:\Windows\System32(这是win7的,其他系统放到对应位置,这样做是为了下一步在CMD中可以操作)

3.打开CMD ,通过keytool命令将刚才D:\的证书导入到JRE的jre\lib\security下的cacerts中。

这是我的CMD命令操作:D:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin>keytool -imp
ort -keystore D:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jr
e\lib\security\cacerts -storepass changeit -keypass changeit -alias DA3 -file D:
\DA3.cer


其中:
     D:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin是keytool所在的目录,因为这个目录才是在java环境下的,如果直接在外面用会提示找不到java环境
     D:\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jr
e\lib\security\cacerts   这是我的cacerts所在的路径,因为证书必须要注入这个文件里面才能得到所有Java程序的信任
     alias DA3是AD的别名,可以随便设置
     file D:\DA3.cer是第1步中导入的证书的地址

4.证书导入成功以后,就基本没问题了。主要是代码上应该注意的事项:
在连接LDAP服务器中的那个用户名要是系统的管理员
如:

ldapEnv.put(Context.SECURITY_PRINCIPAL,"CN=admin,CN=users,DC=mdm,DC=com");
在AD的密码修改操作中,密码应该符合AD的密码策略(长度、复杂度,策略是可以调整的)。

使用SSL协议安全协议(这个主要针对修改密码操作,当然其他操作也可以用)
如:
ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");

使用636端口:如:
 ldapEnv.put(Context.PROVIDER_URL, "
ldap://151.28.1.115:636");


完整的连接写法:

String keystore = "D:/MyEclipse/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/lib/security/cacerts";  
         System.setProperty("javax.net.ssl.trustStore", keystore);
            Hashtable ldapEnv = new Hashtable();
            ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            ldapEnv.put(Context.PROVIDER_URL, "
ldap://151.28.1.115:636");
            ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
            ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=cyzyadmin,CN=users,DC=mdm,DC=com");
            ldapEnv.put(Context.SECURITY_CREDENTIALS, "abc22b2="); // 密码
             ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
            ctx = new InitialLdapContext(ldapEnv, null);

 

 

部分参考链接(这些参考都不是太详细准确,具体的还是看上面我写的):

修改密码要用ssl协议来做(http://www.wosign.com/support/ssl_bak_import.htm):
1.安装SSL证书,请参考
http://wenku.baidu.com/view/cc038dca05087632311212bc.html
2.在本地,也就是Java程序运行端获取导出SSL证书
请参考:方法一:
http://wls981.iteye.com/blog/316012   中的第二步
       方法二:
 http://wenku.baidu.com/view/e30d73bcc77da26925c5b0c8.html
3.代码上的区别,对连接LDAP服务器的初始化会不同:

    需要加上:env.put(Context.SECURITY_PROTOCOL, "ssl");
     需要在adport设置成636         env.put(Context.PROVIDER_URL, "ldaps://" + BaseProperties.adip + ":"
              + BaseProperties.adport);

server 2008 用户可参考:

http://wenku.baidu.com/view/d49c0ec5aa00b52acfc7ca53.html

http://wenku.baidu.com/view/91fad77b5acfa1c7aa00ccbc.html

 

0 0
原创粉丝点击