2012-01-12 42 views
2

MIT Kerberosを認証に使用するWindowsアプリケーションでは苦労しています。私たちはこのチケットを使用しようとすると、しかしMIT KerberosがMSLSAキャッシュでTGTの検索に失敗する

#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) 

:ユーザーがklistが、彼はこの1つを含む、ADから期待されるチケットを取得することを示し、ドメインユーザーアカウントでWindowsにログオンした場合

私たちのアプリケーションでは、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でキャッシュ上の反復の結果と一致することを期待しています。

私はケルベロスに比較的新しく、このコードを同僚の同僚から継承しました。そのため、重要な基本情報が欠落している可能性があります。

答えて

3

おそらく、LSAのセッションキーにアクセスできません。 SSPIのみがアクセスできます。これを試すことができます

原因2:この例外は、一部のWindowsプラットフォームでネイティブチケットキャッシュを使用するとスローされます。マイクロソフトでは、Ticket-Granting Tickets(TGT)のセッションキーをエクスポートしないという新機能を追加しました。その結果、Windowsで取得されたネイティブのTGTには、「空の」セッションキーとnullのETypeがあります。影響を受けるプラットフォームには、Windows Server 2003、Windows 2000 Server Service Pack 4(SP4)、およびWindows XP SP2があります。

解決策2:この新しい機能を無効にするには、Windowsレジストリを更新する必要があります。レジストリキーallowtgtsessionkeyを追加して、正しく設定して、Kerberos Ticket-Granting Ticketでセッションキーを送信できるようにする必要があります。 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がここにも失敗しました。これはオラクル社が推奨するものです。 MIT Kerberosと同じ問題が発生する可能性があります。

この変更は、再起動後のみ有効です。

+0

+1、ありがとう、非常に役に立ちます。それは問題のようです。私はそれを月曜日にもう少し試してみる必要があります。そして、すべてがうまくいくなら、私は答えを受け入れます。 :) – jalf

+0

ハックで動作しましたか? –

+0

そうです。まだまだ不安定ですが、それは別の問題と思われます。Windowsアカウントにログインすると、LSAキャッシュにチケットが表示されないことがあります。 – jalf

関連する問題