2012-01-12 107 views
2

我正在使用使用MIT Kerberos進行身份驗證的Windows應用程序。MIT Kerberos無法在MSLSA緩存中找到TGT

如果一個用戶登錄到Windows域用戶帳戶,klist表明他會從廣告預期的門票,包括這一個:

#1>  Client: jalf @ TESTREALM.COM 
     Server: krbtgt/TESTREALM.COM @ TESTREALM.COM 
     KerbTicket Encryption Type: RSADSI RC4-HMAC(NT) 
     Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent 
     Start Time: 1/12/2012 9:46:27 (local) 
     End Time: 1/12/2012 19:46:27 (local) 
     Renew Time: 1/19/2012 9:46:27 (local) 
     Session Key Type: RSADSI RC4-HMAC(NT) 

然而,當我們嘗試用這張票我們的應用程序,Kerberos庫似乎沒有找到那個。

下面是相關的代碼的簡化版本:

// Open the MSLSA cache 
krb5_cc_resolve(kcontext, "MSLSA:", &mslsa_ccache); 
// Create a cursor for traversing the cache 
krb5_cc_start_seq_get(kcontext, mslsa_ccache, &cursor); 
// Check all the credentials in the cache 
while (!(code = krb5_cc_next_cred(kcontext, mslsa_ccache, &cursor, &creds))) { 
    // Find the one with the INITIAL flag set 
    if (creds.ticket_flags & TKT_FLG_INITIAL) { 
     // ticket found 
     krb5_free_cred_contents(kcontext, &creds); 
     break; 
    } 
    krb5_free_cred_contents(kcontext, &creds); 
} 

krb5_cc_end_seq_get(kcontext, mslsa_ccache, &cursor); 

但無論出於何種原因,我們不會進入// ticket found部分。 運行在調試器的代碼,我可以看到它找到幾張由klist所示的其他門票,但由於某種原因它永遠不會找到一個我們感興趣的問題。

任何人都可以解釋這種現象,或如何解決它?天真地說,我期望klist的輸出匹配krb5_cc_next_cred迭代緩存的結果。

我對Kerberos比較陌生,並且從離開的同事那裏繼承了這段代碼,所以可能我錯過了一些重要的基本信息。

回答

3

您可能無法訪問LSA中的會話密鑰。只有SSPI可以訪問。在某些Windows平臺使用本地票證緩存時,拋出此異常:你可以試試這個

原因2。微軟已經添加了一項新功能,在該功能中,他們不再爲票證授予票證(TGT)導出會話密鑰。因此,在Windows上獲得的本機TGT具有「空」會話密鑰和空EType。受影響的平臺包括:Windows Server 2003,Windows 2000 Server Service Pack 4(SP4)和Windows XP SP2。

解決方案2:您需要更新Windows註冊表以禁用此新功能。應該添加註冊表項allowtgtsessionkey並進行正確設置,以允許在Kerberos票證授予票證中發送會話密鑰。

在Windows Server 2003和Windows 2000 SP4,這裏是必需的註冊表設置:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters 
Value Name: allowtgtsessionkey 
Value Type: REG_DWORD 
Value: 0x01 (default is 0) 

默認情況下,該值爲0;將其設置爲「0x01」允許將會話密鑰包含在TGT中。 下面是在Windows XP SP2中的註冊表設置的位置:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\ 
Value Name: allowtgtsessionkey 
Value Type: REG_DWORD 
Value: 0x01 

Java的GSS IMPL過這裏失敗。這是Oracle推薦的。您可能會遇到與MIT Kerberos相同的問題。

此更改僅在重新啓動後才生效。

+0

+1,謝謝,非常有幫助。這似乎是問題。我需要在週一進行更多測試,如果一切順利,我會接受答案。 :) – jalf 2012-01-13 16:03:16

+0

它與破解工作? – 2012-01-16 16:37:55

+0

似乎喜歡它。這仍然有點不穩定,但這似乎是一個不同的問題。當您登錄到Windows帳戶時,LSA緩存中有時看起來似乎較少或沒有門票。 – jalf 2012-01-16 19:13:38

相關問題