JWS refers to FIPS 180-4 as the definition of SHA-256. That spec defines the 
message digest produced by SHA-256 as a 256-bit binary value, not a hex-encoded 
string. So the "base64url-encoded SHA-256 thumbprint (a.k.a. digest)" is your 
Method 1. Anyone doing Method 2 has a bug.

-- Neil

> On 10 Jan 2024, at 04:10, Thamindu Dilshan Jayawickrama 
> <[email protected]> wrote:
> 
> Hi all,
> 
> I have initiated this mail thread to get your opinion on the correct approach 
> of calculating the "x5t#S256" parameter in the JWKS response. JWS 
> specification [1 
> <https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.8>] defines the 
> "x5t#S256" parameter as follows.
> 
> """
> The "x5t#S256" (X.509 certificate SHA-256 thumbprint) Header
> Parameter is a base64url-encoded SHA-256 thumbprint (a.k.a. digest)
> of the DER encoding of the X.509 certificate [RFC5280] corresponding
> to the key used to digitally sign the JWS.
> """
> 
> Different parties seem to be using two different methods when calculating 
> this field.
> 
> Method 1:
> 
> 1. Take DER encoding of the certificate which produces a 32 byte array
> 2. Take the base64 url encoding
> 
> In this method, we compute this "x5t#S256" parameter by directly url encoding 
> the 32 byte array without taking the hex string. Example given at appendix A 
> of the MTLS token spec [2 
> <https://datatracker.ietf.org/doc/html/rfc8705#section-appendix.a>] appears 
> to be following this method.
> 
> Method 2:
> 
> 1. Take DER encoding of the certificate which produces a 32 byte array
> 2. Convert it into a hexadecimal string and transform it into a 64 byte array
> 3. Take the base64 url encoding
> 
> In some places I have seen the following approach is used to obtain a value 
> equal to the "x5t#S256" field.
> 
> 1. Display the certificate with a tool like Keytool Explorer and copy the SHA 
> 256 fingerprint.
> 2. Remove colons (":"s) and convert it to all lowercase. 
> 3. Base64url encode the value.
> 
> This approach requires the above hexifing step (method 2) in order to produce 
> a similar result when computing the "x5t#S256" field.
> 
> Hence I would like to query about the correct approach to follow when 
> calculating the "x5t#S256" parameter. Or can we accept both these forms as 
> correct methods to calculate the mentioned field?
> 
> Thanks in advance.
> 
> [1] https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.8 
> <https://datatracker.ietf.org/doc/html/rfc7515#section-4.1.8>
> [2] https://datatracker.ietf.org/doc/html/rfc8705#section-appendix.a 
> <https://datatracker.ietf.org/doc/html/rfc8705#section-appendix.a>
> 
> Best Regards,
> Thamindu Jayawickrama
> 
> _______________________________________________
> OAuth mailing list
> [email protected]
> https://www.ietf.org/mailman/listinfo/oauth

_______________________________________________
OAuth mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/oauth

Reply via email to