我一直在尝试按照this Microsoft article中的指南进行身份验证 使用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
我不确定我错过了什么。或者还有其他要检查的事情。
有什么建议吗?
由于
彼得
答案 0 :(得分:4)
确定。 Keytabs应该包含Service主体名称,在本例中为“HTTP /srvnfssol1.dev.local@DEV.LOCAL”和加密密钥。我看到MS文档说的只是为了回应一个文件,但我不认为这是正确的。
您需要使用ktpass实用程序来创建密钥表。 MS文档为here。
特别是,您需要指定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未在密钥表中找到自己。如果未正确设置名称解析/域,也会发生这种情况。
您应该能够在客户端,tcp或udp端口88上使用wireshark查看所有kerberos请求AP-REQ / AP-REP / TGS-REQ / TGS-REP。