JGSS EncryptionKey.findKey() exception handling enhancement - guidance requested
Wei-Jun Wang
weijun.wang at oracle.com
Wed Sep 10 15:24:33 UTC 2025
Hi Jeremy,
Please read https://bugs.openjdk.org/browse/JDK-7197159 for the reason behind the code.
That said, we will see if the exception message can be enhanced or there can be extra debug messages. I've filed https://bugs.openjdk.org/browse/JDK-8367344.
Thanks,
Weijun
> On Sep 9, 2025, at 19:08, Jeremy Jackson <jerj at coplanar.net> wrote:
>
> Hi All,
>
> In developing a Jetty application using SPNEGO, I encountered some
> misleading error messages.
>
> The browser was sending tickets that had a "kvno" that the webserver
> didn't have in it's keytab, yielding:
>
> GSSException: Failure unspecified at GSS-API level (Mechanism level:
> Checksum failed)
>
> Which does not point towards a solution, to say the least.
>
> There are 2 code paths, one (initiator) which requires the newest key be
> returned, and another (acceptor) which requires an exact kvno match.
>
> The current logic returns the newest key even when exact match is
> requested, instead of throwing BADKEYVER.
>
> For the acceptor case, this is an incorrect key, thus
> triggering exceptions related to decryption failure.
>
> According to ChatGPT:
>
> RFC 4120 says that when a server receives an AP-REQ, “If the key version
> indicated by the Ticket in the KRB_AP_REQ is not one the server can use
> (e.g., it indicates an old key, and the server no longer possesses a
> copy of the old key), the KRB_AP_ERR_BADKEYVER error is returned.”
>
> In looking at the code in
>
> src/java.security.jgss/share/classes/sun/security/krb5/EncryptionKey.java
>
> I can see that the BADKEYVER exception is never thrown, but is commented
> out *close* to the required code path with the vague explanation "For
> compatibility, will not fail here."
>
> I have created new test cases for all callers of EncryptionKey.findKey()
> and implemed the missing exception logic. The result has been that
> existing callers are unaffected.
>
> A test of the SPNEGO kvno-mismatch in Jetty now gives the proper exception:
>
> GSSException: Failure unspecified at GSS-API level (Mechanism level:
> Specified version of key is not available (44))
>
> As a first time contributor I would appreciate some guidance here. The
> comments related to the missing exception are a bit troubling, and there
> is also the commented out throw statement, and although I think I have
> test coverage on all the callers of findKey(), I would welcome some input.
>
> Regards,
> Jeremy
>
More information about the security-dev
mailing list