`
hanqunfeng
  • 浏览: 1542206 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Windows Server 2008 Active Directory 安装及使用笔记

阅读更多

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 2008R2 域服务器配置笔记

    在Windows Server 2008 R2中,通过安装Active Directory Domain Services (AD DS)角色来创建和管理域。 1. 安装AD DS: 在安装过程中,你需要选择“目录服务恢复模式”密码,这是一个用于在系统启动时恢复AD DS的...

    Windows server2003 笔记

    接着,笔记可能深入讨论了Windows Server 2003的核心服务,如活动目录(Active Directory)、域控制器(Domain Controller)以及组策略(Group Policy)。活动目录是Windows网络的身份和访问管理基石,用于组织用户...

    Windows Server 2008 之 终端服务TS WEB ACCESS

    本文将深入探讨Windows Server 2008中TS Web Access的配置与使用,以及它为企业带来的价值。 ### 一、TS Web Access概述 TS Web Access是一种基于Web的应用程序发布技术,允许用户通过标准的Web浏览器访问远程应用...

    Windows2008R2平台Exchange2010安装部署笔记(一).pdf

    在本篇《Windows 2008R2平台Exchange2010安装部署笔记(一)》中,我们将深入探讨如何在Windows Server 2008 R2操作系统上安装和配置Microsoft Exchange Server 2010。这是一份详细的步骤指南,涵盖了从系统安装到邮件...

    sql server 帮助文档官方版

    SQL Server 提供了多种安装方式,包括使用安装工具、Azure Data CLI 和 pip 等。用户可以根据需要选择合适的安装方式。此外,SQL Server 还提供了多种部署方式,包括单节点部署、Kubernetes 群集部署等。 管理和...

    exchange 2010在windows 2008R2上部署资料

    在Windows Server 2008 R2上,你需要确保系统已经更新到最新补丁,并安装了所有必要的角色和服务,如Active Directory Domain Services (AD DS)、DNS服务器、DHCP服务器以及远程访问服务等。此外,还需要安装.NET ...

    中型企业ActiveDirectory设计部署.pdf

    Active Directory是微软Windows Server操作系统中的一个关键组件,它提供目录服务、身份验证和授权,对于组织的网络管理和资源访问至关重要。 在中型企业中,AD的设计通常需要考虑多个分支机构的分布式环境。例如,...

    中型企业ActiveDirectory设计部署.docx

    《中型企业ActiveDirectory设计部署》 Active Directory(AD)是微软Windows Server操作系统中的核心组件,主要用于管理和存储组织的网络资源信息,如用户账户、计算机账户、安全策略等。在中型企业环境中,AD的...

    Windows部署服务.docx

    要运行WDS,服务器端的操作系统必须是Windows Server 2008 Longhorn、Windows Server 2003 SP1或Windows Server 2003 R2。同时,WDS服务器需要存在于Active Directory域环境中,并且该域内必须有DHCP服务。这是因为...

    microsoft clear4sure 70-640 2009 Aug

    70-640考试是微软认证专家(MCP)系列中的一个,全称为"Windows Server 2008 Active Directory配置",它是对IT专业人士在部署、配置和管理Windows Server 2008 Active Directory环境能力的验证。 【描述】...

    微软Lync server 2013的安装部署 step by step

    - **准备Active Directory**:创建必要的组织单元(OU)和安全组,为后续的用户和权限管理做准备。 - **准备DNS记录**:配置内部DNS服务器,添加必要的A记录和SRV记录,指向Lync Server的IP地址。 - **构建并发布...

    Symantec Backup Exec™ 12 for Windows® Servers技术白皮书

    - **Active Directory**: 支持Active Directory用户、特性及属性的快速恢复。 - **SharePoint Server**: 支持单个SharePoint Server文档的快速恢复。 ##### 3. 多产品集成创新 - **Symantec Endpoint Protection**:...

    sqlserver2019中文帮助(带书签,高清)

    【安全性】是SQL Server 2019不可忽视的一部分,包括了对Active Directory的支持、用户访问权限的管理以及密钥版本控制。文档还介绍了如何在不同AD模式下进行部署,以及如何在AKS上实现AD连接。 【数据虚拟化】功能...

    windows 域控+证书服务器+IAS+Cisco AP

    - 在 Windows Server 2003 上安装 Active Directory Domain Services 角色。 - 使用“Active Directory 安装向导”来配置域名称、DNS 设置以及系统分区的大小。 - 完成向导后,服务器会自动重启,并成为域控制器...

    Windows8.1预览版产品指南

    Microsoft、Active Directory、Bing、BitLocker、Direct2D、Direct3D、Excel、Internet Explorer、Office、OneNote、Outlook、PowerPoint、SkyDrive、Skype、SmartGlass、SmartScreen、Visual Studio、Windows、...

    七款免费的Windows服务器管理工具.docx

    - **功能概述**:由微软自Windows Server 2008 R2起提供的一款内置工具,用于评估活动目录(Active Directory,简称AD)的配置是否符合最佳实践标准。 - **应用场景**:帮助管理员识别AD中的潜在安全性和性能问题。 ...

    70-413 最新题库

    网络基础设施部分,所有服务器运行Windows Server 2008 R2。员工使用运行Windows 7的笔记本电脑。公司有10台打印服务器,每台服务器上都有多个共享打印机,以及10台文件服务器,它们的磁盘配置包括:NTFS格式的系统...

    windows NPS 结合 Cisco 交换机实现802.1x身份验证

    本文档详细介绍了如何使用Windows Server 2008 R2上的网络策略服务器(NPS)服务与Cisco交换机相结合来实现802.1x身份验证的过程。实验的目的在于通过RADIUS服务器对不同的AD组中的用户进行身份验证,并根据其所属组的...

Global site tag (gtag.js) - Google Analytics