Kerberos "Не удалось найти ключ Kerberos" с Java 1.7 - учетные данные акцептора не распознаны

Я хочу идентифицировать службу против ADS с помощью keytab. Это успешно с Java 8, но не с Java 6 или Java 7. Оба терпят неудачу с ошибкой GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Key),

В обоих случаях я использую isInitiator=true, потому что это не удается, если нет. Насколько я могу видеть, Java 8 находит в этом файле также и учетные данные инициатора:

>>> KeyTab: load() entry length: 70; type: 23
Looking for keys for: HTTP/server.firm.com@FIRM.COM
Added key: 23version: 3
KdcAccessibility: reset
Looking for keys for: HTTP/server.firm.com@FIRM.COM
Added key: 23version: 3
...
Search Subject for Kerberos V5 INIT cred (HTTP/server.firm.com@FIRM.COM sun.security.jgss.krb5.Krb5InitCredential)
Found ticket for HTTP/server.firm.com@FIRM.COM to go to krbtgt/FIRM.COM@FIRM.COM expiring on Fri Aug 28 19:21:38 CEST 2015
Search Subject for Kerberos V5 ACCEPT cred (HTTP/server.firm.com@FIRM.COM, sun.security.jgss.krb5.Krb5AcceptCredential)
Found ticket for HTTP/server.firm.com@FIRM.COM to go to krbtgt/FIRM.COM@FIRM.COM expiring on Fri Aug 28 19:21:38 CEST 2015

Более старые реализации Java находят только инициатор один и генерируют исключение, когда они хотят использовать акцепторный:

>>> KeyTab: load() entry length: 70; type: 23
Added key: 23version: 3

Search Subject for Kerberos V5 INIT cred (HTTP/server.firm.com@FIRM.COM, sun.security.jgss.krb5.Krb5InitCredential)
Found ticket for HTTP/server.firm.com@FIRM.COM to go to krbtgt/FIRM.COM@FIRM.COM expiring on Fri Aug 28 19:20:35 CEST 2015
Search Subject for Kerberos V5 ACCEPT cred (HTTP/server.firm.com@FIRM.COM, sun.security.jgss.krb5.Krb5AcceptCredential)
Exception in thread "main" java.lang.Error: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Key)
    at test.KerberosTicketRetriever$TicketCreatorAction.run(KerberosTicketRetriever.java:97)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:454)
    at ff.support.kerberos.KerberosTicketRetriever.retrieveTicket(KerberosTicketRetriever.java:223)
    at ff.support.kerberos.KerberosTicketRetriever.main(KerberosTicketRetriever.java:292)
Caused by: GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos Key)
    at sun.security.jgss.krb5.Krb5AcceptCredential.getInstance(Krb5AcceptCredential.java:95)
    at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:111)
    at sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:178)
    at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:422)
    at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:42)
    at sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:139)
    at ff.support.kerberos.KerberosTicketRetriever$TicketCreatorAction.createTicket(KerberosTicketRetriever.java:116)
    at ff.support.kerberos.KerberosTicketRetriever$TicketCreatorAction.run(KerberosTicketRetriever.java:93)
    ... 4 more

Сама таблица ключей содержит только один ключ:

C:\> jdk\bin\klist -K -e -t -k myFile.keytab
Key tab: myFile.keytab, 1 entry found.
[1] Service principal: HTTP/server.firm.com@FIRM.COM
         KVNO: 3
         Key type: 23
         Key: 0x2e6a4379b2ba26385d687a5e9d3bc6d
         Time stamp: Jan 01, 1970 01:00

Я не очень понимаю, когда keytab является инициатором, а когда нет, и почему разные версии Java приводят к разным результатам. Может кто-нибудь помочь?

0 ответов

Другие вопросы по тегам