鸿 网 互 联 www.68idc.cn

调试IIS7 Kerberos认证错误:KRB

来源:互联网 作者:佚名 时间:2013-07-02 08:30
问题简介 KRB_AP_ERR_MODIFIED是一种常见的 Kerberos 认证失败消息。意思是在服务器上客户端发送加密的 Kerberos 身份验证数据没有被正确解密。当 Kerberos客户端为某服务请求票据时,通过SPN标识该服务,KDC授予客户端通过服务密钥加密的服务票据。通常情况

问题简介

KRB_AP_ERR_MODIFIED是一种常见的 Kerberos 认证失败消息。意思是在服务器上客户端发送加密的 Kerberos 身份验证数据没有被正确解密。当 Kerberos客户端为某服务请求票据时,通过SPN标识该服务,KDC授予客户端通过服务密钥加密的服务票据。通常情况下是与SPN匹配的AD帐户的密码。

有些时候KDC可能会生成一个通过错误的账号信息加密的服务票据。当客户端提供该票据到服务端认证时,该服务不能解密,身份验证失败,报错KRB_AP_ERR_MODIFED。

换句话说,因为KDC发出票证使用A帐户的密码进行加密,但在服务方尝试用B帐户的密码解密。

通常情况下造成这种问题有这么几种原因,

问题调试 数据收集工具 数据收集步骤 定位Kerberos错误

通过展开IIS返回的HTTP响应标头中的Authenticate字段,可以找到Kerberos身份验证错误的原因。

- Http: Response, HTTP/1.1, Status: Unauthorized, URL: / , Using GSS-API Authentication   ProtocolVersion: HTTP/1.1   StatusCode: 401, Unauthorized   Reason: Unauthorized …   - WWWAuthenticate: Negotiate …     - Authenticate: Negotiate     oWwwaqADCgEBomMEYWBfBgkqhkiG9xIBAgIDAH5QME6gAwIBBaEDAgEepBEYDzIwMTExMDE0MDUxMDE0WqUFAgMG362mAwIBKakKGwhURVN     ULkNPTaoXMBWgAwIBAaEOMAwbCmNvbnRvc29zdmM=     WhiteSpace:     - NegotiateAuthorization:       Scheme: Negotiate       - GssAPI: 0x1         - NegotiationToken:           - ChoiceTag:             - NegTokenResp:           - ResponseToken: 0x1         - KerberosToken: 0x1           - KerberosInitToken: …           - InnerContextToken: 0x1             - KerberosToken: 0x1               TokId: Krb5Error (0x300)               - Error: KRB_ERROR (30) ….               + ErrorCode:               + Realm: TEST.COM               + Sname: contososvc Date: Fri, 14 Oct 2011 05:10:14 GMT ContentLength: 341

如果通过Wireshark抓包错误更明显。

从客户端系统事件日志,可以看到以下事件。

Log Name: System Source: Microsoft-Windows-Security-Kerberos Date: 10/13/2011 10:10:05 PM Event ID: 4 Task Category: None Level: Error Keywords: Classic User: N/A Computer: IIS02.test.com Description: The Kerberos client received a KRB_AP_ERR_MODIFIED error from the server contososvc. The target name used was HTTP/iis01.test.com. This indicates that the target server failed to decrypt the ticket provided by the client. This can occur when the target server principal name (SPN) is registered on an account other than the account the target service is using. Please ensure that the target SPN is registered on, and only registered on, the account used by the server. This error can also happen when the target service is using a different password for the target service account than what the Kerberos Key Distribution Center (KDC) has for the target service account. Please ensure that the service on the server and the KDC are both updated to use the current password. If the server name is not fully qualified, and the target domain (TEST.COM) is different from the client domain (TEST.COM), check if there are identically named server accounts in these two domains, or use the fully-qualified name to identify the server.

根据该日志信息,SPN为HTTP/iis01.test.com,用来解密的账号为contososvc,发生Kerberos认证错误的原因时加密票据的账号不是contososvc。

造成该问题可能的情况如下,

第一种情况:重复的 SPN

重复的SPN是说相同的SPN注册在至少两个帐户上。例如,对两个帐户注册SPN:A和B。KDC可能用A帐户的密码加密服务票据,当在服务端身份验证时,该服务可能实际是账户B,通过账户B信息解密就会报错.

通过setspn工具检测重复SPN

Windows 2008及以上版本的系统,香港虚拟主机,本身提供setspn可以用来检测重复SPN。

除了HTTP/SPN,也要检查Host/SPN。如果HTTP/SPN不存在HOST/SPN将作为默认SPN。错误的HOST/SPN同样会导致Kerberos认证失败。

以下是setspn的关于Windows Server 2008 SP2提供示例输出。

通过ldifde查找重复SPN

Windows 2003 和 XP,美国空间,我们可以使用ldifde工具搜索重复SPN。以下是HTTP/contoso的示例。

SPN是目录林范围(forrest-wide)的对象,它必须在整个域内唯一。对于复杂的环境中,使用按照命令要搜索整个森林,像这样:
Ldifde -s GCName -t 3268 -f d:\spn.ldf -d "dc=test, dc=com" –l ServicePrincipleName –r "(ServicePrincipalName=HTTP/contoso)"

此外,我们可以使用通配符搜索:
Ldifde -s GCName -t 3268 –f d:\spn.ldf -d "dc=test, dc=com" -l servicePrincipalName -r (servicePrincipalName=*contoso*)

第二种情况:客户端发送错的SPN请求票据 定位问题

这种情况与客户端行为相关。如果Web站点使用CNAME资源记录在域名系统(DNS)中,将出现此问题。
例如,DNS 设置如下所示:

Contoso CNAME iis01.test.com
iis01.test.com A 10.0.5.2

使用IE浏览器访问 Web 站点时,IE浏览器使用服务器的主机名(IIS01)而不是CNAME(Contoso)与服务器联系。身份验证可能会失败,报错KRB_AP_ERR_MODIFIED。

HTTP/Contoso.test.com test\contososvc
HOST/IIS01.test.com test\iis01(machine account)


Network Monitor跟踪失败请求
IE 发送请求到,发送contoso的DNS查询。

网友评论
<