AD域认证问题的日常定位方法
AD 域认证问题日常定位方法 内部公开AD 域认证问题日常定位方法1 引子目前TSM 的AD 域认证过程中经常出现问题,由于AD 系统庞大而且终端代理使用第三方库执行主要认证业务,所以AD 域认证过程
AD 域认证问题日常定位方法 内部公开
AD 域认证问题日常定位方法
1 引子
目前TSM 的AD 域认证过程中经常出现问题,由于AD 系统庞大而且终端代理使用第三方库执行主要认证业务,所以AD 域认证过程中的问题很难定位和解决。鉴于此,特将之前用于定位AD 域认证问题的一些经验总结一下,方便今后开发和测试的同事在现场定位问题。 2 AD 域认证过程介绍
TSM 系统的AD 域认证过程主要涉及到三个角色,分别是:TSM 服务器、AD 域控、终端代理。 TSM 和AD 的联动认证是基于标准的Kerberos 协议,标准的Kerberos 认证流程如下:
TSM 在此基础上做了一些调整,主要是第5步和第6步的交互,其交互信息是通过SSL 来加密的。具体交互流程图如下所示:
3/26/2013
华为机密,未经许可不得扩散 第1页, 共7页
,AD 域认证问题日常定位方法 内部公开
从上面的交互流程图可以看出来,整个交互过程分为3个阶段分别是:AS(Authentication Service Exchange )、TGS(Ticket Granting Service Exchange )、AP(Client/Server Exchange )。 在AS 阶段,主要验证的是当前用于进行AD 域认证的用户是当前AD 域控上的合法用户。所以一般如果用户名或者密码错误时将会在这个阶段得到AD 返回的错误信息。此外如果出现TSM 服务器和AD 上的时间偏差较大的时候也会在这个阶段出错。
在TGS 阶段,主要是终端代理获取其要请求的认证服务的票证的过程,如果这个时候请求的认证服务不存在,则在第4步返回的错误信息中指示
KDC_ERR_S_PRINCIPAL_UNKNOWN,表明当前请求的服务不存在。之前在大足的AD 域联动测试中就出现了这个问题。
在AP 阶段,服务器将会验证终端代理发送的TGS ,来决定当前认证用户是否具有访问当前请求的认证服务的权限。
3 基本问题定位方法
3.1 验证网络是否可达
在定位AD 域认证相关的问题时,首先第一点是验证网络是否可达即,是否能够访问你当前AD 域控。
3/26/2013
华为机密,未经许可不得扩散 第2页, 共7页
,AD 域认证问题日常定位方法 内部公开
在这种情况下首先在系统的命令行提示下ping 目标主机(AD 域控所在的机器)的IP 地址,如果能够ping 通目标主机则证明网络链路是可达的,如果ping 不通此时请首先检查网络链路。
在上面网络链路可达的基础上需要验证域名解析是否正确,此时在系统命令提示下ping AD域名,如果能够ping 通则证明域名解析是没有问题的。相反如果无法ping 通目标域名,此时首先请检查当前激活链接的网卡上的DNS 配置确保其配置指向的是AD 所对应的DNS 服务器的地址,并且同时要检查一下当前系统的53端口是否被防火墙或者主动防御软件给禁止掉,确保53端口是开放的。
对于上一步或者在终端上使用nslookup 也可以达到相同作用。
3.2 验证本地是否可以正确的和AD 域控进行通信
在网络可达的基础上,如果还是出现AD 域认证不通过的问题时,需要验证终端系统能否和AD 域控进行通信。
首先验证一下本地的TCP/UDP的88端口是否是开放的,需要查看本地防火墙配置是否禁止了88端口,88端口是用于Kerberos 认证的。
在终端利用微软提供的工具ldp.exe 来连接AD 域控的389端口,如果连接失败请查看AD 域控上的配置。
3.3 检查认证报文
在上面两步后如果还是出现AD 认证不通过的问题后,此时需要进行抓包操作。通过报文来分析问题。
抓包过程描述如下:
1. 找一台未加入域的PC 机作为测试机;
2. 将这台测试机的DNS 服务器设为本地的域控(除本地域控外,请不要
设置其他的DNS 服务器);
3. 重启测试机(这一步用来清除LSA 中缓存的kerberos ticket);
4. 从下面的连接下载Network Monitor 3.1工具,并安装到测试机上:
3/26/2013
华为机密,未经许可不得扩散 第3页, 共7页
,AD 域认证问题日常定位方法 内部公开
5. 运行Netmon 3.1工具,并选择“File->New->Capture”;
6. 如果该计算机上有多个网络连接,在”Select Networks”中,选择我
们所关心的封包所流经的连接(比如Local Area Connection); 7. 在菜单中,选择Tools->Options->Capture, 并将临时捕捉文件的大小
调整为20Megabytes ;
8. 在菜单中,选择“Capture->Start”,开始抓包; 9. 尝试进行AD 域认证;
10. 在Netmon 工具界面中选择“Capture->Stop”停止抓包; 11. 选择“File->Save as”, 将网络抓包保存为joindomain.cap 文件;
具体分析请参考上面的AD 认证流程和下面的错误信息表:
Kerberos Error Number 0x3 0x6 0x7 0x8 0xA 0xB 0xC 0xD 0xE 0xF 0x10 0x12 0x17
3/26/2013
Kerberos Error Code Description
Requested protocol version number not supported. Client not found in Kerberos database.
Server not found in Kerberos database.
KDC_ERR_BAD_PVNO
KDC_ERR_C_PRINCIPAL_UNKNOWN KDC_ERR_S_PRINCIPAL_UNKNOWN
Multiple principal entries in
KDC_ERR_PRINCIPAL_NOT_UNIQUE
database. KDC_ERR_CANNOT_POSTDATE KDC_ERR_NEVER_VALID KDC_ERR_POLICY KDC_ERR_BADOPTION KDC_ERR_ETYPE_NOSUPP KDC_ERR_SUMTYPE_NOSUPP KDC_ERR_PADATA_TYPE_NOSUPP KDC_ERR_CLIENT_REVOKED KDC_ERR_KEY_EXPIRED
Ticket not eligible for postdating.
Requested start time is later than end time.
KDC policy rejects request. KDC cannot accommodate requested option. KDC has no support for encryption type. KDC has no support for checksum type.
KDC has no support for pre-authentication data type. Client’s credentials have been revoked.
Password has expired - change
第4页, 共7页
华为机密,未经许可不得扩散
,AD 域认证问题日常定位方法 内部公开
password to reset.
0x18 0x19 0x1B 0x1C 0x1D 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x28 0x29 0x34 0x3C 0x44
KDC_ERR_PREAUTH_FAILED KDC_ERR_PREAUTH_REQUIRED KDC_ERR_MUST_USE_USER2USER KDC_ERR_PATH_NOT_ACCPETED KDC_ERR_SVC_UNAVAILABLE KRB_AP_ERR_BAD_INTEGRITY KRB_AP_ERR_TKT_EXPIRED KRB_AP_ERR_TKT_NYV KRB_AP_ERR_REPEAT KRB_AP_ERR_NOT_US KRB_AP_ERR_BADMATCH KRB_AP_ERR_SKEW KRB_AP_ERR_MSG_TYPE KRB_AP_ERR_MODIFIED KRB_ERR_RESPONSE_TOO_BIG KRB_ERR_GENERIC KDC_ERR_WRONG_REALM
Pre-authentication
information was invalid. Additional
pre-authentication required. Server principal valid for user-to-user only.
KDC Policy rejects transited path.
A service is not available. Integrity check on decrypted field failed. Ticket expired. Ticket not yet valid. Request is a replay. The ticket isn’t for us. Ticket and authenticator do not match.
Clock skew too great. Invalid message type. Message stream modified. Response too big for UDP, retry with TCP.
Generic error (description in e-text).
User-to-user TGT issued different KDC.
3.4 查看AD 域控上的配置情况
查看AD 域控上的配置情况一般分为以下几个阶段
1、 查看并收集测试帐号和SPN 帐号的配置信息 在AD 域控所在的终端机器上运行如下两个命令:
ldifde -f out1.txt -d "dc=solo,dc=local" -r "(sAMAccountName=Stanley)"
ldifde -f out2.txt -d "dc=solo,dc=local" -r "()" 2、 在AD 域控上运行Netdiag /v>netdiag.txt,并将运行结果保存下来 3、 在AD 域控上运行dcdiag /v>dcdiag.txt,并将运行结果保存下来
3/26/2013
华为机密,未经许可不得扩散
第5页, 共7页
,AD 域认证问题日常定位方法 内部公开
4、 收集AD 域控所在机器的MPS Report信息
● 从下面的连接,下载MPSRPT_DirSvc.EXE文件(文件大小702B ):
● 在步骤1所使用的测试机上运行MPSRPT_DirSvc.EXE;根据计算
机的性能及网络连接等情况,MPS Report工具可能运行5-15分
钟。
● 待MPSRPT_DirSvc.EXE运行完毕后,一个名
为COMPUTERNAME_MPSReports_DirSvc.cab的.cab 文件将
被保存在路径:systemrootMPSReportsDirSvcLogs�b;
在收集到以上信息之后请打包发回到研发出进行信息分析。
3.5 查看在用户登录过程中是否出现异常
在XXX 局点出现部分采用域帐户登录系统过慢的现象,其登录过程大约持续了10分钟。一般处理这种登录问题的时候由于没有进入操作系统很难采用一般的工具来采集数据。 此时需要依赖于操作系统的事件日志功能来查看在用户登录系统过程中发生了什么问题。 通过查看一些异常日志信息来定位。
此外在系统的事件日志中没有发现一些异常信息时,可以通过打开操作系统的登录日志开关来获取当前登录系统时的一些具体的执行操作。具体方法如下所示:
在注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows
NTCurrentVersionWinlogon下建立一个DWORD 键值UserEnvDebugLevel ,将其值设为十六进制的30002(十进制为:196610)。
而后重新启动操作系统,在登录到操作系统后,在当前的操作系统目录
WINDOWS�bugUserMode下将会出现一个userenv.log 文件,此文件将会记录所有在用户登录过程中的日志信息,通过查看此信息可以判断到底在登录过程中发生了那些问题。
3.6 后记
一般而言,AD 域认证失败的问题主要是从上面介绍的几方面来进行分析。尤其在配置SPN 账户映射时需要格外注意以下两点:
3/26/2013
华为机密,未经许可不得扩散 第6页, 共7页
,AD 域认证问题日常定位方法 内部公开
1、 在配置SPN 账户时请确保在真实终端上进行配置,如果是在无法接触到真实终端,
请采用控制台登录的方式来远程登录到目标主机,使用命令:mstsc /console 目标主机
2、 在配置SPN 账户时请确保ktpass 命令工具和AD 域控所在主机操作系统的版本相同,
即2000对应2000 resource kit下的ktpass 命令行工具,2003对应2003 resource kit下的ktpass 命令行工具
3、 在配置SPN 帐号时请确保当前系统的主机防火墙和主动防御软件被关闭,在SPN 账
户配置完毕后可以重新打开上述安全软件
此外象此类系统问题的定位有时候牵扯到各种方面的知识,除了AD 域本身还有关于系统自身的知识,因此其定位方法也是多种多种多样,所以上面的定位方法也不是万能的。
3/26/2013
华为机密,未经许可不得扩散 第7页, 共7页