2

我一直在尝试按照这篇 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 进程上运行了一个 truss,并确认它实际上正在加载 keytab 文件。我想知道keytab文件的格式是否有问题......

HTTP/srvnfssol1.dev.local@DEV.LOCAL

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

有什么建议么?

谢谢

彼得

4

1 回答 1

5

行。密钥表应该包含服务主体名称,在本例中为“HTTP/srvnfssol1.dev.local@DEV.LOCAL”和加密密钥。我看到 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 服务器将在 keytab 中查找其密钥,解密票证并授予访问权限。

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

You should be able to see all the kerberos requests AP-REQ/AP-REP/TGS-REQ/TGS-REP using wireshark on the client, tcp or udp port 88.

于 2009-06-11T03:41:21.807 回答