`
wls981
  • 浏览: 137316 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

用JAVA通过LDAP修改AD用户密码注意事项

    博客分类:
  • java
阅读更多
    最近要用java来修改windows 2003的Active Directory(简称AD)上的用户,包括新增、修改、删除,普通的操作这里就不说了,网上有一大堆的资料,这里记述一下本人操作过程中遇到的问题及解决方法。
    通过ldap来修改AD的用户信息,除了修改密码外,其他的都可以使用非安全的连接进行操作,也就是可以不走SSL连接来操作,注意AD的普通端口是389,SSL端口是636。
    当使用SSL连接修改密码时,需要在连接端安装证书,怎么获取证书,本人使用网上其他人介绍的证书方法,全是无法成功,都是出现 unable to find valid certification path to requested target  错误,最终经一朋友提示,使用其他方法获取到正确的证书,具体如下:
    1、安装证书服务。在ldap服务器上安装证书服务。证书服务的安装没什么特别的注意,请参考其他人的文章。
   
    2、获取客户端证书。别人都是通过下载证书的方式来获取证书,但是我通过这种方式就是无法成功修改密码,也都是提示 unable to find valid certification path to requested target 这个错误。我的操作方法为,用IE通过SSL直接连接ldap服务器(也就是安装AD的那台机器),使用636端口,类似于  https://192.168.0.111:636  ,连接的时候会提示安装证书,这时候把这个证书保存下来,即为需要的客户端证书。

    3、连接。得到证书后,我在连接的时候成功了,但在修改AD用户密码的时候还是报错,但这次的错误为  javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000052D: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0    ,操作不支持错误,在这个问题了转了好久都没解决,后来无意中看到一篇文章讲到AD中的密码策略问题,才想起来windows2003中AD中的默认密码策略有长度限制和复杂性要求,所以才导致出现OperationNotSupportedException异常,记得在域控制器上查看自己的域策略。

后记:由于水平原因,就因为证书的问题搞了两天多才搞定,其实通过调整域策略可以使用修改密码不需要走SSL通道的,但这都是旁门左道,希望写下这篇文章对大家有所帮助。
分享到:
评论
11 楼 sunjiankirk 2014-11-05  
博主,我已经解决这个问题了!
主要是userAccountControl这个属性值设置的问题(创建新用户时,如要设定密码,不能使用默认的ACCOUNTDISABLE+PASSWD_NOTREQD+NORMAL_ACCOUNT,只需要NORMAL_ACCOUNT即可),希望博主及时更新代码。
具体参见http://www.forumeasy.com/forums/thread.jsp?tid=134931028635&fid=ldapprof9&highlight=How+add+active+user+account+Active+Directory
10 楼 sunjiankirk 2014-11-04  
博主你好,首先非常感谢你的这篇文章。点出AD操作的关键点。
我现在是在windows 2008 r2上测试,发现,创建用户时,
如果直接设置unicodePwd属性,会出现错误:LDAP error code 16,有未识别的属性。
我看到其他人的代码,也提到需要先创建用户,再设置密码。

这个博主,有什么可以赐教的。
9 楼 乱世小雄 2014-05-16  
Leecupn 写道
楼主,我和三楼的情况是一样的,我获取证书并安装完成了之后,为什么还是报:
javax.naming.CommunicationException: simple bind failed: 192.168.136.202:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
异常呢??
怎样才能与好好你交流下?
期待回复,谢谢!

8 楼 jakejone 2012-12-04  
有帮助。谢谢啦
7 楼 qlong8807 2012-11-14  
能问一下,怎么安装证书服务吗?
6 楼 wls981 2009-09-02  
其实只要是AD中提供的对象,你都是可以修改的,group如果是AD提供的对象,那肯定也是可以修改的,修改方法应该跟用户类似。
5 楼 Leecupn 2009-08-21  
to wls981:
谢谢,问题我前几天已经解决了,确实是证书没导入。
请问一下,除了对用户编辑外,我可以对用户组,也就是group进行增、删操作吗?这是一个比较严峻的问题啊
期待回复。
4 楼 wls981 2009-08-19  
to Leecupn:

你证书正确的导入到JDK里了吗?连接的时候相应的证书路径是否指定正确呢?
3 楼 Leecupn 2009-08-17  
楼主,我获取证书并安装完成了之后,为什么还是报:
javax.naming.CommunicationException: simple bind failed: 192.168.136.202:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
异常呢??
怎样才能与好好你交流下?
期待回复,谢谢!
2 楼 wls981 2009-08-09  
具体的操作方法网上有很多代码你可以找找看,只要注意证书正确即可。
1 楼 zhangfeiii 2009-05-08  
我們公司B/S架構的系統,目前需要直接在界面上操作AD用戶信息(比如用戶帳號停用 / 用戶密碼Update等),請問能否詳細敘述下技術層面,謝謝!

相关推荐

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

    Java 使用 LDAP 修改 AD 域用户密码 本文将详细介绍如何使用 Java 语言通过 LDAP 协议修改 Windows Active Directory 域用户的密码。同时,本文也将对相关概念进行解释,以便读者更好地理解整个过程。 LDAP 概念 ...

    java使用ldap修改ad域用户密码收集.pdf

    Java 使用 LDAP 修改 AD 域用户密码收集是指通过 Java 语言使用 LDAP 协议修改 Active Directory 域用户的密码。下面是相关知识点的总结: 1、LDAP 无法获取 Window s Active Directory 用户密码。这是因为 LDAP ...

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

    标题“java 使用 ldap 修改 ad 域用户密码.pdf”和描述“java 使用 ldap 修改 ad 域用户密码.pdf”均指向了使用 Java 语言通过 LDAP 协议修改 Active Directory 域用户密码的主题。 二、标签 标签“技术”表明本...

    JAVA ldap AD 域 免证书 查询 修改 删除 新增 启用 禁用 修改密码

    在这篇文章中,我们将探讨使用 JAVA 实现 LDAP 的 AD 域免证书查询、修改、删除、新增、启用、禁用和修改密码的操作。 首先,让我们了解什么是 LDAP 和 AD 域。LDAP(Lightweight Directory Access Protocol)是一...

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

    Java 使用 LDAP 修改 AD 域中的用户密码是通过 Java 语言使用 LDAP 协议连接到 Active Directory 域控制器,以修改用户密码的操作。以下是相关知识点的详细解释。 一、LDAP 无法获取 Windows Active Directory 用户...

    Java AD域插入用户和密码修改

    1. **导入AD域证书**:在Java应用中使用AD域服务之前,必须先导入AD域的证书,以建立安全的SSL/TLS连接。这通常涉及将证书导入到Java的信任库(cacerts),可以通过`keytool`命令行工具完成。 2. **配置环境**:...

    JAVA修改AD域密码_免证书

    4. **修改密码**:使用`DirContext.modifyAttributes()`方法,更新用户对象的`unicodePwd`属性。这个属性是AD用来存储密码的特殊属性,其值需要编码为特定格式。 ```java String userDN = "CN=John Doe,OU=Users,...

    JAVA中使用LDAP进行用户认证

    JAVA中使用LDAP进行用户认证 JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行...

    JAVA使用Ldap操作AD域的方法示例

    在本文中,我们将深入探讨如何使用Java通过Ldap与Active Directory (AD)域进行交互。首先,我们需要了解AD域是一个集中式服务,用于管理网络中的用户、计算机和其他资源的身份和权限。Ldap(轻量级目录访问协议)是...

    java操作Ldap,支持建立开启状态的用户,支持修改密码,放入eclipse测试即用

    在本项目中,可能包含了一个或多个Java类,这些类封装了与AD域交互的逻辑,如创建用户、设置用户状态(例如启用/禁用)、以及修改用户密码。 创建用户通常涉及到以下步骤: 1. 连接到AD服务器,这通常通过提供...

    JAVA通过LDAP+SSL(证书)实现用户和组织(部门)增删改查.zip

    本文将深入探讨如何使用Java通过LDAP(轻量级目录访问协议)和SSL(安全套接层)来实现用户和组织(部门)的增删改查操作,并结合证书确保通信的安全性。这些功能通常用于大型企业的用户管理,例如Active Directory...

    LDAP实现AD域账号验证 - Java/SpringBoot

    在IT行业中, Lightweight Directory Access Protocol (LDAP) 是一种用于存储和检索目录信息的标准协议,而Active Directory (AD) 是微软提供的目录服务,广泛应用于企业环境中进行用户身份验证和权限管理。Java和...

    修改ldap密码源代码

    1. **LDAP操作**:代码可能会使用特定的库(如Python的ldap3库或Java的JNDI)进行连接、搜索、修改等操作。这可能涉及bind(连接)、search(查询)、modify(修改)等 LDAP 操作。 2. **密码策略**:可能涉及到...

    java对LDAP的增删改查

    通过 JNDI,开发者可以使用 Java 语言来访问和操作 LDAP 服务器。 在本文中,我们将讨论 Java 语言如何使用 JNDI 对 LDAP 服务器进行增删改查等操作。我们将使用一个简单的示例程序来演示如何使用 JNDI 连接到 LDAP...

    AD自助修改密码,webAD自助修改密码

    "AD自助修改密码"是AD服务中的一个重要功能,它允许用户通过Web界面自主更改自己的密码,无需管理员介入,提高了效率并降低了支持成本。 在传统的AD管理中,如果用户忘记密码或需要更改密码,通常需要联系管理员来...

    JAVA新建、修改、删除AD用户及更新密码

    世​上​最​全​通​过​利​用​J​A​V​A​新​建​、​修​改​、​删​除​A​D​用​户​、​添​加​至​组​及​更​新​密​码​,​包​括​证​书​服​务​器​的​配​置​、​J​A​V​A​证​书​导...

    修改ad域密码及新增账号demo.zip

    在这个"修改AD域密码及新增账号demo.zip"压缩包中,我们看到的是一个基于Java操作LDAP(轻量级目录访问协议)来与AD域进行交互的示例代码,目的是为了演示如何修改AD用户的密码以及如何新增AD账号。 首先,理解Java...

    JAVA JNDI免证书修改AD域密码.zip

    总的来说,理解如何在Java中使用JNDI免证书连接AD并修改密码是一项关键技能,尤其在处理企业级应用集成和自动化任务时。但是,安全始终是首要考虑,因此在实际应用中应尽可能使用安全的连接方式。

    java连接LDAP的jar包和实例

    这个主题涉及几个关键知识点,包括Java LDAP API、SSL安全连接以及如何通过代码操作LDAP目录。 首先,LDAP是一个开放标准的协议,用于存储和检索用户、组、计算机等对象的数据。这些数据通常分布在多台服务器上,...

    使用Java操作LDAP案例

    本案例将介绍如何使用Java编程语言操作LDAP服务器,实现用户登录验证等功能。 首先,我们需要了解Java中的JNDI(Java Naming and Directory Interface)框架,它是Java提供的一套标准API,用于与各种命名和目录服务...

Global site tag (gtag.js) - Google Analytics