2008-09-24 40 views
2

我一直在嘗試遵循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] 

雖然我不知道我在想什麼。還有什麼其他的事情要檢查。

有什麼建議嗎?

感謝

彼得

+0

願我們看到的密鑰表文件中的客戶端,TCP或UDP端口?我知道這主要是二進制格式,但我想看看密鑰是否真的在那裏。 – davenpcj 2008-09-24 14:10:28

回答

4

確定。 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

相關問題