1.安装AD
http://www.docin.com/p-191729140.html
问题:
安装 windows server 2008企业版,安装完后administrator密码为空,随后自己设置了符合密码策略的密码。服务器已经重启过。但在建AD时,确切说运行dcpromo后,提示administrator账号密码不符合要求,进行不下去。
解决方法:使用administrator登录系统,cmd运行如下命令:
C:\Users\Administrator>net user administrator /passwordreq:yes
命令成功完成。
安装VPN服务,开启AD后可以使用AD中配置的账号登录。
http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=8913
2.密码复杂度限制
http://www.cnblogs.com/ceachy/articles/2418657.html
以下步骤是为了实现java+ldap修改密码
3.安装证书服务
服务器管理器--角色--添加角色
http://blog.sina.com.cn/s/blog_67288bc90100jbwh.html
http://wenku.baidu.com/link?url=NGj3ZlGIBK3NQxXqFIgKDqGKelGz7EYhoyxpFcI5OrNpCG6li37TeAIPdVdXcmGN_ClX7LC7LtVpSml-fwjpBAgIX5qP5zeKCfGBE9oWYMO
4.向mmc中添加证书管理器
http://technet.microsoft.com/zh-cn/library/aa997890(EXCHG.80).aspx
5.java使用ldap修改用户密码
简单说就是三步:
1)通过mmc导出3中生成的ca证书
2)新建一个“个人”证书,类型为“域控制器身份验证”,并将其导出
3)将导出的两个证书使用java的keytool 分别导入到xx.keystore中
http://wenku.baidu.com/view/e30d73bcc77da26925c5b0c8.html
亲测,只导入1)中的证书就可以连接ssl了,将生成的security.keystore保存到指定路径即可。
keytool -import -alias local-ad-server -file "ad_server.cer" -keystore "security.keystore" -storepass changeit
6.cas+ldap
http://www.micmiu.com/enterprise-app/sso/sso-cas-ldap-auth/
7.通过IIS修改密码
windows server 2003 :http://wenku.baidu.com/view/00994454f01dc281e53af043.html
windows server 2008 :http://wenku.baidu.com/view/0698385fbe23482fb4da4c43.html
8.其它
LDAP百度百科:http://baike.baidu.com/view/159263.htm
AD常用命令:http://wenku.baidu.com/view/7196dc1fc281e53a5802ffcf.html
LdapUtil.java
package utils; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Hashtable; import java.util.List; import java.util.Map; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.ModificationItem; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class LdapUtil { public static LdapContext ctxTDS; /** * 连接LDAP */ public static LdapContext connetLDAP() throws NamingException { // 连接Ldap需要的信息 if (ctxTDS == null) { String ldapFactory = "com.sun.jndi.ldap.LdapCtxFactory"; String ldapUrl = "ldaps://169.254.105.76:636";// url,如果是ssl协议,端口是636 String ldapAccount = "CN=Administrator,CN=Users,DC=piaoyi,DC=local"; // 用户名 String ldapPwd = "LdapAdminPassword";// 密码 Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, ldapFactory); // LDAP server env.put(Context.PROVIDER_URL, ldapUrl); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, ldapAccount); env.put(Context.SECURITY_CREDENTIALS, ldapPwd); env.put(Context.REFERRAL, "follow"); // ssl证书 String keystore = "D:/ldap_modify/security.keystore";// 证书路径:cacerts文件路径 System.setProperty("javax.net.ssl.trustStore", keystore); System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); env.put(Context.SECURITY_PROTOCOL, "ssl"); ctxTDS = new InitialLdapContext(env, null); System.out.println("##########Connet LDAP success!##########"); } return ctxTDS; } /** * 查询用户是否存在 * * @param propertityName * @param propertityValue * @return */ public static List<String> searchDNByPropertity(String propertityName, String propertityValue) { System.out.println("##########search LDAP start!##########"); List<String> list = new ArrayList<String>(); String userDN = ""; LdapContext ctx; try { ctx = connetLDAP(); String filter = "(&(objectClass=top)(objectClass=organizationalPerson)(" + propertityName + "=" + propertityValue + "))"; // 限制要查询的字段内容 String[] attrPersonArray = { "distinguishedName" }; SearchControls searchControls = new SearchControls(); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); // 设置将被返回的Attribute searchControls.setReturningAttributes(attrPersonArray); // 三个参数分别为: // 上下文; // 要搜索的属性,如果为空或 null,则返回目标上下文中的所有对象; // 控制搜索的搜索控件,如果为 null,则使用默认的搜索控件 NamingEnumeration<SearchResult> answer = ctx.search( "DC=piaoyi,DC=local", filter.toString(), searchControls); // 输出查到的数据 while (answer.hasMore()) { SearchResult result = answer.next(); NamingEnumeration<? extends Attribute> attrs = result .getAttributes().getAll(); while (attrs.hasMore()) { Attribute attr = attrs.next(); userDN = (String) attr.get(); list.add(userDN); System.out.println(attr.getID() + "=" + attr.get()); } } System.out.println("##########search LDAP success!##########"); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("##########search LDAP fail!##########"); } // 设置过滤条件 return list; } /** * 修改用户属性,这种方式不能修改用户密码 * * @param userDN * @param map * @return */ public static boolean ModifyPropertiesByDN(String userDN, Map<String, String> map) { System.out.println("##########Data modify start!##########"); boolean result = true; LdapContext ctx; try { ctx = connetLDAP(); Attributes attrs = new BasicAttributes(true); for (Map.Entry<String, String> entry : map.entrySet()) { attrs.put(entry.getKey(), entry.getValue()); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } ctx.modifyAttributes(userDN, DirContext.REPLACE_ATTRIBUTE, attrs); System.out.println("##########Data modify success!##########"); } catch (NamingException e) { // TODO Auto-generated catch block result = false; e.printStackTrace(); System.out.println("##########Data modify fail!##########"); } return result; } /** * 删除用户 * * @param userDN * @return */ public static boolean RemoveUserByDN(String userDN) { System.out.println("##########Data remove start!##########"); boolean result = true; LdapContext ctx; try { ctx = connetLDAP(); ctx.destroySubcontext(userDN); System.out.println("##########Data remove success!##########"); } catch (NamingException e) { // TODO Auto-generated catch block result = false; e.printStackTrace(); System.out.println("##########Data remove fail!##########"); } return result; } /** * 添加用户 * * javax.naming.OperationNotSupportedException: [LDAP: error code 53 - * 0000052D: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0] * * 异常原因:密码不符合密码策略。 解决方式两种:1、把密码改得复杂点,大小写+数字+字母等等。 2、把AD密码策略去掉。 * * javax.naming.OperationNotSupportedException: [LDAP: error code 53 - * 0000001F: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0] * * 异常原因:必须使用证书才可修改AD密码。【注意:和上边的异常只差在 error code 后边的一长串码上,一定要看清楚了】 * 解决方式:配置成SSL证书形式。先创建用户,再修改密码。 * * @param userDN * @param cn * @param password * @param map * @return */ public static boolean AddUserByMap(String userDN, String cn, String password, Map<String, String> map) { System.out.println("##########Data add start!##########"); boolean result = true; LdapContext ctx; try { ctx = connetLDAP(); List<String> list = searchDNByPropertity("distinguishedName", userDN); if (list == null || list.size() == 0) { Attributes attrs = new BasicAttributes(true); Attribute objclass = new BasicAttribute("objectclass"); // 添加ObjectClass String[] attrObjectClassPerson = { "user", "organizationalPerson", "person", "top" }; Arrays.sort(attrObjectClassPerson); for (String ocp : attrObjectClassPerson) { objclass.add(ocp); } attrs.put(objclass); attrs.put("cn", cn); for (Map.Entry<String, String> entry : map.entrySet()) { attrs.put(entry.getKey(), entry.getValue()); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } ctx.createSubcontext(userDN, attrs); System.out.println("##########Data add success!##########"); if (password != null && !"".equals(password)) { modifyUserPasswordByDN(userDN, password); } } else { result = false; System.out.println("##########Data has exist!##########"); } } catch (NamingException e) { // TODO Auto-generated catch block result = false; e.printStackTrace(); System.out.println("##########Data add fail!##########"); } return result; } /** * 修改指定用户的密码 * * @param userDN * @param password * @return */ public static boolean modifyUserPasswordByDN(String userDN, String password) { System.out.println("##########Modify password start!##########"); boolean result = true; LdapContext ctx; try { ctx = connetLDAP(); ModificationItem[] mods = new ModificationItem[1]; String newQuotedPassword = "\"" + password + "\""; byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE"); mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword)); ctx.modifyAttributes(userDN, mods); System.out.println("##########Modify password success!##########"); } catch (NamingException | UnsupportedEncodingException e) { // TODO Auto-generated catch block result = false; e.printStackTrace(); System.out.println("##########Modify password fail!##########"); } return result; } }
相关推荐
在Windows Server 2008 R2中,通过安装Active Directory Domain Services (AD DS)角色来创建和管理域。 1. 安装AD DS: 在安装过程中,你需要选择“目录服务恢复模式”密码,这是一个用于在系统启动时恢复AD DS的...
接着,笔记可能深入讨论了Windows Server 2003的核心服务,如活动目录(Active Directory)、域控制器(Domain Controller)以及组策略(Group Policy)。活动目录是Windows网络的身份和访问管理基石,用于组织用户...
本文将深入探讨Windows Server 2008中TS Web Access的配置与使用,以及它为企业带来的价值。 ### 一、TS Web Access概述 TS Web Access是一种基于Web的应用程序发布技术,允许用户通过标准的Web浏览器访问远程应用...
在本篇《Windows 2008R2平台Exchange2010安装部署笔记(一)》中,我们将深入探讨如何在Windows Server 2008 R2操作系统上安装和配置Microsoft Exchange Server 2010。这是一份详细的步骤指南,涵盖了从系统安装到邮件...
SQL Server 提供了多种安装方式,包括使用安装工具、Azure Data CLI 和 pip 等。用户可以根据需要选择合适的安装方式。此外,SQL Server 还提供了多种部署方式,包括单节点部署、Kubernetes 群集部署等。 管理和...
在Windows Server 2008 R2上,你需要确保系统已经更新到最新补丁,并安装了所有必要的角色和服务,如Active Directory Domain Services (AD DS)、DNS服务器、DHCP服务器以及远程访问服务等。此外,还需要安装.NET ...
Active Directory是微软Windows Server操作系统中的一个关键组件,它提供目录服务、身份验证和授权,对于组织的网络管理和资源访问至关重要。 在中型企业中,AD的设计通常需要考虑多个分支机构的分布式环境。例如,...
《中型企业ActiveDirectory设计部署》 Active Directory(AD)是微软Windows Server操作系统中的核心组件,主要用于管理和存储组织的网络资源信息,如用户账户、计算机账户、安全策略等。在中型企业环境中,AD的...
要运行WDS,服务器端的操作系统必须是Windows Server 2008 Longhorn、Windows Server 2003 SP1或Windows Server 2003 R2。同时,WDS服务器需要存在于Active Directory域环境中,并且该域内必须有DHCP服务。这是因为...
70-640考试是微软认证专家(MCP)系列中的一个,全称为"Windows Server 2008 Active Directory配置",它是对IT专业人士在部署、配置和管理Windows Server 2008 Active Directory环境能力的验证。 【描述】...
- **准备Active Directory**:创建必要的组织单元(OU)和安全组,为后续的用户和权限管理做准备。 - **准备DNS记录**:配置内部DNS服务器,添加必要的A记录和SRV记录,指向Lync Server的IP地址。 - **构建并发布...
- **Active Directory**: 支持Active Directory用户、特性及属性的快速恢复。 - **SharePoint Server**: 支持单个SharePoint Server文档的快速恢复。 ##### 3. 多产品集成创新 - **Symantec Endpoint Protection**:...
【安全性】是SQL Server 2019不可忽视的一部分,包括了对Active Directory的支持、用户访问权限的管理以及密钥版本控制。文档还介绍了如何在不同AD模式下进行部署,以及如何在AKS上实现AD连接。 【数据虚拟化】功能...
- 在 Windows Server 2003 上安装 Active Directory Domain Services 角色。 - 使用“Active Directory 安装向导”来配置域名称、DNS 设置以及系统分区的大小。 - 完成向导后,服务器会自动重启,并成为域控制器...
Microsoft、Active Directory、Bing、BitLocker、Direct2D、Direct3D、Excel、Internet Explorer、Office、OneNote、Outlook、PowerPoint、SkyDrive、Skype、SmartGlass、SmartScreen、Visual Studio、Windows、...
- **功能概述**:由微软自Windows Server 2008 R2起提供的一款内置工具,用于评估活动目录(Active Directory,简称AD)的配置是否符合最佳实践标准。 - **应用场景**:帮助管理员识别AD中的潜在安全性和性能问题。 ...
网络基础设施部分,所有服务器运行Windows Server 2008 R2。员工使用运行Windows 7的笔记本电脑。公司有10台打印服务器,每台服务器上都有多个共享打印机,以及10台文件服务器,它们的磁盘配置包括:NTFS格式的系统...
本文档详细介绍了如何使用Windows Server 2008 R2上的网络策略服务器(NPS)服务与Cisco交换机相结合来实现802.1x身份验证的过程。实验的目的在于通过RADIUS服务器对不同的AD组中的用户进行身份验证,并根据其所属组的...