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


    最近公司要用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:MyEclipseCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013in)目录下的keytool.exe工具,将其复制到C:WindowsSystem32(这是win7的,其他系统放到对应位置,这样做是为了下一步在CMD中可以操作)

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

    这是我的CMD命令操作:D:MyEclipseCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013in>keytool -imp
    ort -keystore D:MyEclipseCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013jr
    elibsecuritycacerts -storepass changeit -keypass changeit -alias DA3 -file D:
    DA3.cer


    其中:
         D:MyEclipseCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013in是keytool所在的目录,因为这个目录才是在java环境下的,如果直接在外面用会提示找不到java环境
         D:MyEclipseCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013jr
    elibsecuritycacerts   这是我的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

  • 相关阅读:
    Mongo简单查询总结
    将对象转换成Dictionary 字典
    C#调用NPOI组件导出Excel表格
    Lambda中的一些方法的总结
    LinQ总结
    简单的爬虫 一
    Python 中的注释规范
    在VM上配置一个能上网的网络设置
    Python 中新式类的内置方法
    Python 中的locals()
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318072.html
Copyright © 2020-2023  润新知