0

keytab を使用して ADS に対してサービスを識別したいと考えています。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

keytab 自体には、キーが 1 つだけ含まれています。

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

キータブがイニシエーターである場合とイニシエーターでない場合、およびJavaのバージョンが異なると結果が異なる理由がよくわかりません。誰か助けてくれませんか?

4

0 に答える 0