RFR 8215032: Support Kerberos cross-realm referrals (RFC 6806)

Weijun Wang weijun.wang at oracle.com
Tue Dec 11 05:34:13 UTC 2018


Hi Martin,

This is really a big contribution. I'll look at it once I have free time. Currently busy with last minute changes before JDK 12 RDP.

Thanks,
Max

> On Dec 10, 2018, at 11:39 PM, Martin Balao <mbalao at redhat.com> wrote:
> 
> Hi,
> 
> I'd like to propose an implementation of Kerberos cross-realm referrals
> for OpenJDK's client, according to RFC 6806 [1].
> 
> Request for Enhancement: "JDK-8215032 - Support Kerberos cross-realm
> referrals (RFC 6806)" [2].
> 
> Related tickets: "JDK-6631053 - Support canonicalize in Kerberos
> configuration file" [3] and "JDK-8005819 - Support cross-realm MSSFU" [4].
> 
> Webrev.00:
> 
> * http://cr.openjdk.java.net/~mbalao/webrevs/8215032/8215032.webrev.00/
> * http://cr.openjdk.java.net/~mbalao/webrevs/8215032/8215032.webrev.00.zip
> 
> Implementation notes:
> 
> * System properties introduced:
>  * sun.security.krb5.disableReferrals: disable this feature
>  * sun.security.krb5.maxReferrals: max referral hops for both client
> and server referrals (5 by default, as suggested by RFC 6806)
>  * CSR will be needed
> 
> * NT-ENTERPRISE principals
>  * Supported
>  * Krb5LoginModule has not been extended to use it. However, I'm open
> to discuss this API first and propose an implementation then -either in
> the context of this enhancement or in a new one-.
> 
> * Client referrals
>  * Supported
>  * Client announces support setting CANONICALIZE flag
>   * Fallback: if a failure occurs, client retries without CANONICALIZE flag
> 
> * Server referrals
>  * Supported
>  * Client announces support setting CANONICALIZE flag
>   * Fallback: if a failure occurs, client retries without CANONICALIZE flag
> 
> * FAST
>  * RFC 6806 - Section 11 FAST scheme supported
>   * Complete FAST support (RFC 6113) is out of scope
>  * RFC 6806 - Section 11 FAST is mandatory for AS-REQ, and optional for
> TGS-REQ. Client does not ask for it in TGS requests -sending
> PA-REQ-ENC-PA-REP PA data- for compatibility reasons. Some servers do
> not support PA-REQ-ENC-PA-REP in TGS requests and if no checksum is
> available in TGS responses (even though ENC_PA_REP flag is set), no
> enforcement is possible.
>   * MIT's client does not send PA-REQ-ENC-PA-REP requests for TGS, only
> for TGTs [5]
>   * MIT's client only verifies PA-REQ-ENC-PA-REP for TGTs [6]
>   * MIT's KDC supports PA-REQ-ENC-PA-REP in TGT [7] and TGS [8]
> replies, but Microsoft's Active Directory 2016 does not apparently.
> 
> * Cache
>  * If a referral loop is introduced when adding a new entry to the
> cache, we break the loop by invalidating the "next" entry
>  * Adding an entry to the cache may override a previous one
>   * The assumption is that newer information is more accurate
>   * For a given Principal Name, there can only be one "Realm -> Next
> Realm" referral entry (whose lifetime is given by the referral krbtgt
> ticket)
> 
> * Security
>  * Client name changes are allowed in AS-REPs only if:
>   * Client sent CANONICALIZE
>   * Server supports RFC 6806 - Section 11 FAST
>   * Authenticated checksum is correct
>  * Server name changes are allowed in TGS-REPs only if:
>   * Client sent CANONICALIZE
>   * It's for a referral (sname = krbtgt/TO-REALM.COM at FROM-REALM.COM)
> 
> * Testing
>  * KDC used for testing purposes was extended to include basic support
> of RFC 6806 server-side
>   * NT-ENTERPRISE principals
>   * Client referrals
>   * Server referrlas
>   * FAST - Section 11 scheme
>  * ReferralsTest functional test added
>   * Client referral with NT-ENTERPRISE principal
>   * Server referral
> 
> Regressing testing:
> 
> * No regressions found in jdk/sun/security/krb5 category.
>  * Test results: passed: 128
> 
> I'd be grateful if someone can have a look.
> 
> Kind regards,
> Martin.-
> 
> --
> [1] - https://tools.ietf.org/html/rfc6806.html
> [2] - https://bugs.openjdk.java.net/browse/JDK-8215032
> [3] - https://bugs.openjdk.java.net/browse/JDK-6631053
> [4] - https://bugs.openjdk.java.net/browse/JDK-8005819
> [5] -
> https://github.com/krb5/krb5/blob/f0bcb86131e385b2603ccf0f3c7d65aa3891b220/src/lib/krb5/krb/get_in_tkt.c#L1421
> [6] -
> https://github.com/krb5/krb5/blob/f0bcb86131e385b2603ccf0f3c7d65aa3891b220/src/lib/krb5/krb/get_in_tkt.c#L1665
> [7] -
> https://github.com/krb5/krb5/blob/f0bcb86131e385b2603ccf0f3c7d65aa3891b220/src/kdc/do_as_req.c#L326
> [8] -
> https://github.com/krb5/krb5/blob/f0bcb86131e385b2603ccf0f3c7d65aa3891b220/src/kdc/do_tgs_req.c#L724



More information about the security-dev mailing list