Java 1.8 JAAS не распознает участника в моей собственной сгенерированной таблице ключей

Java не может найти мое основное имя в моем собственном файле таблицы ключей?
Я ожидал, что модуль Java JAAS сгенерирует TGT, когда он найдет принципала в моем файле таблицы ключей. Я также использовал kinit для того же файла keytab, и это работает.

Хотя JAAS находит keytab, как указано в файле конфигурации, я получаю следующее сообщение:

...
Native config name: C:\Windows\krb5.ini
getRealmFromDNS: trying YEF.GSC.RD
Acquire TGT from Cache
>>>KinitOptions cache name is C:\Users\tester1\krb5cc_tester1
>> Acquire default native Credentials
Using builtin default etypes for default_tkt_enctypes
default etypes for default_tkt_enctypes: 17 16 23.
LSA: Found KrbCreds constructor
LSA: Got handle to Kerberos package
LSA: Response size is 0
LSA: Error calling function Protocol status: 1312
LSA: A specified logon session does not exist. It may already have been terminated.
>>> Found no TGT's in LSA
Principal is [email protected]
null credentials from Ticket Cache
Looking for keys for: [email protected]
Key for the principal [email protected] not available in c:/user/tester1/keytab

(Я использовал флаг отладки -Dsun.security.krb5.debug=true, чтобы получить эти сведения, и запустил его автономно вместо веб-запуска, просто чтобы начать работу без дополнительных затрат на запуск веб-запуска)
В конфигурационном файле написано:

  WEBSTART_CLIENT_CONTEXT {
       com.sun.security.auth.module.Krb5LoginModule required 
       useTicketCache=true
       doNotPrompt=false   
       principal=john
       renewTGT=true
       useKeyTab=true
       keyTab="c:/user/tester1/keytab"
       debug=true; 
    };  

Файл keytab, который я сгенерировал локально на клиентской машине:

c:\Users\tester1>klist -k -t -K -e keytab

Key tab: keytab, 6 entries found.

[1] Service principal: [email protected]
         KVNO: 1
         Key type: 17
         Key: 0x2dccdcd29d17e2719eb5af9f1b0f7448
         Time stamp: Oct 30, 2015 15:37:02
[2] Service principal: [email protected]
         KVNO: 1
         Key type: 16
         Key: 0xcd10890becd5fbcb526e9104765116807a5ecd38da762ab0
         Time stamp: Oct 30, 2015 15:37:02
[3] Service principal: [email protected]
         KVNO: 1
         Key type: 23
         Key: 0xb9218bada80f02c685e1958a5042f5fc
         Time stamp: Oct 30, 2015 15:37:02
[4] Service principal: [email protected]
         KVNO: 1
         Key type: 17
         Key: 0x7d4b7a98e179d7284dcd7ff3a69c890e
         Time stamp: Nov 02, 2015 13:24:37
[5] Service principal: [email protected]
         KVNO: 1
         Key type: 16
         Key: 0x4ca17a0b2a58679207162cf13864c143d05e869101b5a2ef
         Time stamp: Nov 02, 2015 13:24:37
[6] Service principal: [email protected]
         KVNO: 1
         Key type: 23
         Key: 0xb9218bada80f02c685e1958a5042f5fc
         Time stamp: Nov 02, 2015 13:24:37

Но по какой-то причине JAAS не может найти [email protected], так как пишет:

Ключ для принципала [email protected] недоступен в c:/user/tester1/keytab

Кто-то в Интернете упомянул, что KVNO равен 0. Поэтому я также проверил это, используя:

ktab -k keytab -a [email protected] -n 0

Но произошла точно такая же ошибка. Хотелось бы знать, что java ожидает найти в keytab.

Использование Java 1.8.0 на компьютере с Windows 7


person Houtman    schedule 04.11.2015    source источник
comment
К вашему сведению, есть еще один флаг отладки на случай, если вы даже не войдете в библиотеки KRB из-за хромой конфигурации: -Djava.security.debug=configfile,gssloginconfig,configparser,logincontext   -  person Samson Scharfrichter    schedule 05.11.2015


Ответы (1)


Ваша проблема, скорее всего, связана с ошибкой path. В вашей конфигурации вы используете путь keyTab="c:/user/tester1/keytab", и когда вы проверяете его с помощью инструмента klist, вы используете другой путь c:\Users\tester1>.

Ваша конфигурация должна указывать на правильный путь. Учитывая, что это не опечатка, должно быть:

keyTab="c:/Users/tester1/keytab"
person Jorge Campos    schedule 04.11.2015
comment
Теперь, когда это работает. Есть ли способ для JAAS сохранить сгенерированные TGT и SessionKey в файле кеша krb5cc_tester1? Я не нашел для этого флага в Krb5LoginModule. - person Houtman; 04.11.2015
comment
@Houtman, к сожалению, я не могу с этим помочь, потому что не знаю, смогу ли, извините. - person Jorge Campos; 04.11.2015
comment
Установите переменную среды KRB5CCNAME как ФАЙЛ:‹путь›, чтобы указать библиотекам Kerberos использовать кеш не по умолчанию (в Linux по умолчанию используется ФАЙЛ: в /tmp, в Windows это API: в зависимости от процесса Kerberos MIT) - person Samson Scharfrichter; 05.11.2015
comment
@Самсон Спасибо. Я заметил, что после установки инструмента Kerberos для Windows kfw-4.0.1-i386.msi все изменилось?! Затем, запустив Java, я использовал Sysinternals ProcessMonitor и обнаружил, что Java JAAS-LSA обращается к lsas.exe и может получить TGT (но по какой-то причине только для пользователя, вошедшего в систему Windows, попытка другого участника не удалась). (я проверил переменную среды KRB5CCNAME, но она не была установлена. Я нашел раздел реестра для инструмента MIT ccname со значением «API:»). Было бы здорово, если бы JAAS мог получить доступ к lsass.exe без необходимости его установки. инструмент :/ - person Houtman; 05.11.2015
comment
Было бы здорово, если бы Microsoft использовала GSSAPI вместо SSPI — но в Windows, увы, все должно использовать SSPI из-за Active Directory — все, кроме Java и, опционально, Firefox. Даже cURL использует SSPI и не может работать с графическими интерфейсами Hadoop. - person Samson Scharfrichter; 05.11.2015
comment
Я заметил это. интересно, что меняет инструмент MIT. -do-it-withou" title="mit kerberos tool позволяет jaas получить доступ к Windows LSA, как это сделать без"> stackoverflow.com/questions/33570059/ - person Houtman; 06.11.2015