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]
虽然我不知道我在想什么。还有什么其他的事情要检查。
有什么建议吗?
感谢
彼得
确定。 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
愿我们看到的密钥表文件中的客户端,TCP或UDP端口?我知道这主要是二进制格式,但我想看看密钥是否真的在那里。 – davenpcj 2008-09-24 14:10:28