我一直在尝试按照此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/srvnfssol1.dev.local@DEV.LOCAL
[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/srvnfssol1.dev.local@DEV.LOCAL

我不确定我错过了什么。或者还有其他要检查的事情。

有什么建议吗?

由于

彼得

有帮助吗?

解决方案

确定。 Keytabs应包含Service主体名称,在本例中为<!> quot; HTTP /srvnfssol1.dev.local@DEV.LOCAL <!> quot;和加密密钥。我看到MS文档说的只是为了回应一个文件,但我不认为这是正确的。

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

特别是,您需要指定KRB5_NT_SRV_HST,其余大多数选项都可以是默认选项。

我机器上的样品:

C:\>ktpass /out test.keytab /princ HTTP/srvnfssol1.dev.local@DEV.LOCAL 
           /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/srvnfssol1.dev.local@DEV.LOCAL 
ptype 3 (KRB5_NT_SRV_HST) vno 1 etype 0x1 (DES-CBC-CRC) 
keylength 8 (0xa7f1fb38041c199e)

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

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

未找到<!>“键表条目<!>”;发生错误,因为apache没有在keytab中找到自己。如果未正确设置名称解析/域,也会发生这种情况。

您应该能够在客户端,tcp或udp端口88上使用wireshark查看所有kerberos请求AP-REQ / AP-REP / TGS-REQ / TGS-REP。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top