MIT Kerberos не может найти TGT в кэше MSLSA - PullRequest
2 голосов
/ 12 января 2012

Я борюсь с приложением Windows, которое использует MIT Kerberos для аутентификации.

Если пользователь входит в Windows с учетной записью пользователя домена, klist показывает, что он получает ожидаемые билеты от AD, включая эту:

#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 и унаследовал этот код от ушедшего сотрудника, так что, возможно, мне не хватает какой-то важной фундаментальной информации.

1 Ответ

3 голосов
/ 13 января 2012

У вас, вероятно, нет доступа к ключу сеанса в LSA.Только SSPI может получить доступ.Вы можете попробовать это

Причина 2: Это исключение выдается при использовании собственного кэша билетов на некоторых платформах Windows.Microsoft добавила новую функцию, в которой они больше не экспортируют сеансовые ключи для билетов на выдачу билетов (TGT).В результате нативный TGT, полученный в Windows, имеет «пустой» ключ сеанса и нулевой EType.К таким платформам относятся: Windows Server 2003, Windows 2000 Server с пакетом обновления 4 (SP4) и Windows XP с пакетом обновления 2 (SP2).

Решение 2. Вам нужно обновить реестр Windows, чтобы отключить эту новую функцию.Чтобы разрешить отправку ключей сеанса в билете выдачи билетов Kerberos, необходимо добавить и правильно задать ключ реестра.настройка:

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 с пакетом обновления 2 (SP2):

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

Сбой Java GSS здесь также не выполняется.Это рекомендуется Oracle.Вы можете страдать от той же проблемы с MIT Kerberos.

Это изменение вступает в силу только после перезагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...