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

时间:2020-03-06 14:39:49  来源:igfitidea点击:

我一直在尝试按照此Microsoft文章中的指南进行身份验证
针对带有Kerberos和AD的Apache。我已经使用kinit成功测试了apache服务器和AD服务器之间的通信。但是,当我尝试使用IE访问服务器上的受限页面时,出现内部服务器错误,并且以下错误出现在apache错误日志中。

[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进程上运行了一个桁架,并确认它实际上是在加载keytab文件。我想知道keytab文件的格式是否有问题...

HTTP/[email protected]

我不确定我缺少什么。或者其他要检查的东西。

有什么建议?

谢谢

彼得

解决方案

好的。密钥表应该包含服务主体名称,在这种情况下为" HTTP/[email protected]"和加密密钥。我看到了MS文档所说的只是将其回显到文件的位置,但我认为这是不对的。

我们需要使用ktpass实用程序来创建密钥表。 MS文档在这里。

特别是,我们需要指定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)

如果活动目录服务器是KDC,则需要使用/ map &lt;name>参数,其中<name>是活动目录中代表服务器的计算机帐户。

有关所有这些工作原理的一些详细信息。当我们浏览该网站时,它应该以WWW-Authenticate:Negotiate标头响应,并且浏览器将向KDC(活动目录服务器)发送请求以获取该服务的kerberos票证。 AD服务器将使用服务主体名称查找票证的加密密钥,然后将加密的服务票证发送回浏览器。浏览器获得服务凭单后,它将使用包含该凭单的身份验证标头重新发出HTTP请求。 apache服务器将在密钥表中查找其密钥,解密票证并授予访问权限。

发生"找不到密钥表条目"错误是因为apache在密钥表中找不到自己。如果名称解析/领域设置不正确,也会发生这种情况。

我们应该能够使用客户端上的Wireshark,TCP或者UDP端口88查看所有kerberos请求AP-REQ / AP-REP / TGS-REQ / TGS-REP。