RFR 8227437: S4U2proxy cannot continue because server's TGT cannot be found

Weijun Wang weijun.wang at oracle.com
Wed Jul 17 07:30:56 UTC 2019


There is still a kerberosTicketSetClientAlias() call in Krb5LoginModule.java. Otherwise looks fine.

I'll run some internal test now.

Thanks,
Max

> On Jul 17, 2019, at 2:58 PM, Martin Balao <mbalao at redhat.com> wrote:
> 
> Hi Max,
> 
> Webrev.02 is ready:
> http://cr.openjdk.java.net/~mbalao/webrevs/8227437/8227437.webrev.02/
> 
> On 7/17/19 12:23 AM, Weijun Wang wrote:
>> Krb5Context.java and Krb5LoginModule.java:
>> 
>> There is no need to set the aliases, already done inside Krb5Util.credsToTicket(serviceCreds). The case in Krb5LoginModule.java is more complicated, due to your change in webrev.01. See below.
>> 
> 
> Duplicated alias set removed from Krb5Context.java. Thanks.
> 
> In regards to Krb5LoginModule.java, I made a mistake when generating
> Webrev.01 (my idea was to set a client alias equal to "principal").
> However, I decided to remove it for Webrev.02. When we retrieve the
> ticket from the cache, we use either "principal" or null (but then we
> assign "principal" to whatever cname the ticket has). As a result, the
> ticket cname will match "principal" and setting it as an alias adds
> nothing. Sorry for the noise here.
> 
>>> 
>>> * Fixed a bug in referral TGTs Credentials (no server alias should be
>>> there)
>>> * See this change in KrbTgsRep.java
>> 
>> But this is not harmful, right? The referral TGTs are not stored in a Subject and its alias is not used.
> 
> Right. Not harmful but not correct. Found it a bit confusing when
> debugging. As you said, referral TGTs are not stored.
> 
>> 
>>> * Fixed a bug in Krb5LoginModule
>>> * If we get a TGT from a ccache, that TGT will not have client alias
>>> and its cname may be different than the subject principal. If we commit
>>> this ticket in the subject private credentials, we will not find it.
>>>  * My proposal is to force the subject principal as an alias if: cname
>>> differs from the subject principal AND there is no client alias.
>>> * See this change in Krb5LoginModule.java
>> 
>> KerberosPrincipal kClient = new KerberosPrincipal(
>>        cred.getClient().getName());
>> if (!princSet.contains(kClient)) {
>>    kClientAlias = kClient;
>> }
>> 
>> Looks like this ticket's name and alias will be the same? Is this useful?
>> 
> 
> Removed. See above.
> 
>> 
>> Or, if CANONICALIZE is not set (who knows why), then there will be no alias and the alias is the name.
> 
> Yes, if we send no CANONICALIZE (i.e.: because of the fallback scheme),
> we will have no client alias but the ticket cname will then be equal to
> the subject (kerberos) principal.
> 
> Regression testing in jdk/sun/security/krb5 category passed.
> 
> Are we good to go with Webrev.02?
> 
> Thanks,
> Martin.-



More information about the security-dev mailing list