Thanks Simo. It wouldn't surprise me that java's implementation is wrong. The comments in the source even ask if its necessary to check.
Thanks Marc Marc Boorshtein CTO Tremolo Security marc.boorsht...@tremolosecurity.com (703) 828-4902 On Tue, Oct 27, 2015 at 4:12 PM, Simo Sorce <s...@redhat.com> wrote: > On 27/10/15 15:43, Marc Boorshtein wrote: >>>> >>>> >>>> Looking at KrbKdcRep.java:73 it looks like the failure is happening >>>> because java is setting the forwardable flag to true on the request >>>> but the response has no options in it. Should the forwardable option >>>> be false in the request? >>> >>> >>> >>> That's a fair guess. >>> the whole point of constrained delegation (including protocol >>> impersonation) >>> is that you do not want to forward tickets, so you shouldn't ask for >>> forwardable tickets methinks. >>> >>> Simo. >>> >> >> Thanks Simio. I tried running kinit with forwarding disabled: >> >> $ kinit HTTP/unison-freeipa.rhelent....@rhelent.lan -k -t >> ./unison-freeipa.keytab -F >> >> $ klist -f >> >> Ticket cache: FILE:/tmp/krb5cc_500 >> >> Default principal: HTTP/unison-freeipa.rhelent....@rhelent.lan >> >> >> Valid starting Expires Service principal >> >> 10/27/15 15:32:52 10/28/15 15:32:52 krbtgt/rhelent....@rhelent.lan >> >> Flags: IA >> >> But when I try again Java refuses to generate the ticket: >> >> tremoloadmin@unison-freeipa ~]$ klist -f >> Ticket cache: FILE:/tmp/krb5cc_500 >> Default principal: HTTP/unison-freeipa.rhelent....@rhelent.lan >> >> Valid starting Expires Service principal >> 10/27/15 15:32:52 10/28/15 15:32:52 krbtgt/rhelent....@rhelent.lan >> Flags: IA >> >> Hello World! >> Search Subject for Kerberos V5 INIT cred (<<DEF>>, >> sun.security.jgss.krb5.Krb5InitCredential) >> No Subject >>>>> >>>>> KinitOptions cache name is /tmp/krb5cc_500 >>>>> DEBUG <CCacheInputStream> client principal is >>>>> HTTP/unison-freeipa.rhelent....@rhelent.lan >>>>> DEBUG <CCacheInputStream> server principal is >>>>> krbtgt/rhelent....@rhelent.lan >>>>> DEBUG <CCacheInputStream> key type: 18 >>>>> DEBUG <CCacheInputStream> auth time: Tue Oct 27 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> start time: Tue Oct 27 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> end time: Wed Oct 28 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> renew_till time: null >>>>> CCacheInputStream: readFlags() INITIAL; PRE_AUTH; >>>>> DEBUG <CCacheInputStream> client principal is >>>>> HTTP/unison-freeipa.rhelent....@rhelent.lan >> >> Java config name: /home/tremoloadmin/krb5.conf >> Loaded from Java config >>>>> >>>>> DEBUG <CCacheInputStream> server principal is >>>>> X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/rhelent....@rhelent.lan@RHELENT.LAN >>>>> DEBUG <CCacheInputStream> key type: 0 >>>>> DEBUG <CCacheInputStream> auth time: Wed Dec 31 19:00:00 EST 1969 >>>>> DEBUG <CCacheInputStream> start time: null >>>>> DEBUG <CCacheInputStream> end time: Wed Dec 31 19:00:00 EST 1969 >>>>> DEBUG <CCacheInputStream> renew_till time: null >>>>> CCacheInputStream: readFlags() >> >> Found ticket for HTTP/unison-freeipa.rhelent....@rhelent.lan to go to >> krbtgt/rhelent....@rhelent.lan expiring on Wed Oct 28 15:32:52 EDT >> 2015 >> Search Subject for SPNEGO INIT cred (<<DEF>>, >> sun.security.jgss.spnego.SpNegoCredElement) >> No Subject >> Search Subject for Kerberos V5 INIT cred (<<DEF>>, >> sun.security.jgss.krb5.Krb5InitCredential) >> No Subject >>>>> >>>>> KinitOptions cache name is /tmp/krb5cc_500 >>>>> DEBUG <CCacheInputStream> client principal is >>>>> HTTP/unison-freeipa.rhelent....@rhelent.lan >>>>> DEBUG <CCacheInputStream> server principal is >>>>> krbtgt/rhelent....@rhelent.lan >>>>> DEBUG <CCacheInputStream> key type: 18 >>>>> DEBUG <CCacheInputStream> auth time: Tue Oct 27 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> start time: Tue Oct 27 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> end time: Wed Oct 28 15:32:52 EDT 2015 >>>>> DEBUG <CCacheInputStream> renew_till time: null >>>>> CCacheInputStream: readFlags() INITIAL; PRE_AUTH; >>>>> DEBUG <CCacheInputStream> client principal is >>>>> HTTP/unison-freeipa.rhelent....@rhelent.lan >>>>> DEBUG <CCacheInputStream> server principal is >>>>> X-CACHECONF:/krb5_ccache_conf_data/fast_avail/krbtgt/rhelent....@rhelent.lan@RHELENT.LAN >>>>> DEBUG <CCacheInputStream> key type: 0 >>>>> DEBUG <CCacheInputStream> auth time: Wed Dec 31 19:00:00 EST 1969 >>>>> DEBUG <CCacheInputStream> start time: null >>>>> DEBUG <CCacheInputStream> end time: Wed Dec 31 19:00:00 EST 1969 >>>>> DEBUG <CCacheInputStream> renew_till time: null >>>>> CCacheInputStream: readFlags() >> >> Found ticket for HTTP/unison-freeipa.rhelent....@rhelent.lan to go to >> krbtgt/rhelent....@rhelent.lan expiring on Wed Oct 28 15:32:52 EDT >> 2015 >>>>> >>>>> CksumType: sun.security.krb5.internal.crypto.HmacMd5ArcFourCksumType >> >> Exception in thread "main" GSSException: Failure unspecified at >> GSS-API level (Mechanism level: Attempt to obtain S4U2self credentials >> failed!) >> at >> sun.security.jgss.krb5.Krb5InitCredential.impersonate(Krb5InitCredential.java:357) >> at >> sun.security.jgss.spnego.SpNegoCredElement.impersonate(SpNegoCredElement.java:94) >> at >> sun.security.jgss.GSSCredentialImpl.impersonate(GSSCredentialImpl.java:141) >> at io.tremolo.App.main(App.java:27) >> Caused by: KrbException: Invalid option setting in ticket request. (101) >> at sun.security.krb5.KrbTgsReq.<init>(KrbTgsReq.java:165) >> at sun.security.krb5.KrbTgsReq.<init>(KrbTgsReq.java:100) >> at >> sun.security.krb5.internal.CredentialsUtil.acquireS4U2selfCreds(CredentialsUtil.java:66) >> at >> sun.security.krb5.Credentials.acquireS4U2selfCreds(Credentials.java:463) >> at >> sun.security.jgss.krb5.Krb5InitCredential.impersonate(Krb5InitCredential.java:353) >> ... 3 more >> >> Looking at KrbTgsReq line 165: >> >> if (options.get(KDCOptions.FORWARDABLE) && >> (!(asCreds.flags.get(Krb5.TKT_OPTS_FORWARDABLE)))) { >> throw new KrbException(Krb5.KRB_AP_ERR_REQ_OPTIONS); >> } >> >> If I read this correctly it has to be forwardable? If thats the case >> is Java wrong for requiring the options to be there or is ipa wrong >> for not sending the options with the response ticket? > > > I think the best answer would be to look at what the MIT test program does > and make sure Java does the same. > This stuff works with the native libraries and is interoperable with Windows > AD KDCs where the specification was born. > > Simo. > > > -- > Simo Sorce * Red Hat, Inc * New York -- Manage your subscription for the Freeipa-users mailing list: https://www.redhat.com/mailman/listinfo/freeipa-users Go to http://freeipa.org for more info on the project