gss_acquire_cred正在返回密钥表条目未找到错误

问题描述:

我一直在尝试遵循this Microsoft article中的指导原则来使用Kerberos和AD对Apache进行身份验证 。我用kinit成功测试了apache服务器和AD服务器之间的通信。但是,当我尝试访问IE浏览器服务器上的受限页面时,出现内部服务器错误,并在apache错误日志中显示以下内容。gss_acquire_cred正在返回密钥表条目未找到错误

[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1483): [client 172.31.37.38] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos 
[Wed Sep 24 14:18:15 2008] [debug] src/mod_auth_kerb.c(1174): [client 172.31.37.38] Acquiring creds for HTTP/[email protected] 
[Wed Sep 24 14:18:15 2008] [error] [client 172.31.37.38] gss_acquire_cred() failed: Miscellaneous failure (see text) (Key table entry not found) 

我已经运行的Apache进程桁架,并确认它实际上是加载了密钥表文件就OK了。我想知道keytab文件的格式是否有问题...

HTTP/[email protected] 

虽然我不知道我在想什么。还有什么其他的事情要检查。

有什么建议吗?

感谢

彼得

+0

愿我们看到的密钥表文件中的客户端,TCP或UDP端口?我知道这主要是二进制格式,但我想看看密钥是否真的在那里。 – davenpcj 2008-09-24 14:10:28

确定。 Keytabs应该包含Service主体名称,在本例中为“HTTP/[email protected]”和加密密钥。我看到MS文档所说的只是将其附加到文件中,但我认为这不对。

您需要使用ktpass实用程序来创建密钥表。 MS文档是here

尤其是,您需要指定KRB5_NT_SRV_HST,其余大部分选项都可以是默认值。它在我的机器上

样品:

C:\>ktpass /out test.keytab /princ HTTP/[email protected] 
      /ptype KRB5_NT_SRV_HST /pass * 
Type the password for HTTP/srvnfssol1.dev.local: 
Key created. 

Output keytab to test.keytab: 

Keytab version: 0x502 
keysize 62 HTTP/[email protected] 
ptype 3 (KRB5_NT_SRV_HST) vno 1 etype 0x1 (DES-CBC-CRC) 
keylength 8 (0xa7f1fb38041c199e) 

如果Active Directory服务器为KDC,你需要使用/map <name>参数,其中<name>是代表服务器的计算机帐户在Active Directory中。

关于这些工作的一些细节。当您浏览到网站时,它应该使用WWW-Authenticate:Negotiate标头进行响应,并且您的浏览器将向KDC(活动目录服务器)发送请求以获取该服务的kerberos票据。 AD服务器将使用服务主体名称查找票证的加密密钥,并将加密的服务票据发送回浏览器。一旦浏览器拥有服务票据,它将使用包含该票据的验证标头重新发出HTTP请求。 Apache服务器将在密钥表中查找它的密钥,解密票证并授予访问权限。

“key table entry not found”错误发生是因为apache在keytab中找不到自己。如果名称解析/领域设置不正确,也可能发生。

你应该能够看到所有的请求的Kerberos AP-REQ/AP-REP/TGS-REQ/TGS-REP使用Wireshark的第88