Hi Ivan,

Thanks for the feedback.  Yes, it was my intent to include extensions that come in from all potential sources, be it via the hello extension, embedded in certs, or via OCSP responses.  The source did seem important.  And I did want to be sensitive to 1.0 and 2.0 formats since both are in RFC form, not drafts.  Or at least design things with forward compatibility in mind.

I had one other question in going through both RFCs (6962 and 9162).  Both of those specifications seem to focus on the end-entity TLS certificate.  In looking at the CAB baseline requirements, it appears that signed certificate timestamp lists can exist in subordinate CA certificates too.  I just don't know how common that is, since it is a "MAY" in the baseline requirements.  So I'm wondering if it will be helpful in presenting to the Java consumer the list of SCTs also grouped by certificate in some fashion.  Do you think that would be helpful? It could be simply ordered in the same ordering as the chain is presented, or it could be ordered by X509Certificate or maybe a certificate hash.  Not sure.  I would love to hear your thoughts on that.

I wasn't thinking along the lines of including the raw extension bytes.  That certainly would be one way to expose 1.0 vs. 2.0, but there may be other ways to present the data to the user that lessens the work on the user's side in terms of parsing the data. I'm still chewing on that one because presenting the SCTs as objects rather than opaque byte arrays means a larger API change. But I'm also looking at how much we can pave the way with this RFE towards a full implementation in the future.  The CSR would be explicit about all of these public, API changes and while in draft form there can be discussion and changes/improvements to any proposed API.

Thanks,

--Jamil

On 3/4/2025 7:39 AM, Ivan Ristic wrote:
Hi Jamil,

Thanks for opening that ticket. I notice that the wording is generic to SCTs, which might indicate that you want to include the ones embedded in certificates and OCSP responses. Did you meant that? If so, they will absolutely need a wrapper to indicate the source. In that case, you must just as well include a version number so that the wrapper is generic and future-compatible.

It probably makes sense to include all SCTs because—I am guessing—it will not be possible for non-JDK code to observe OCSP responses that are not stapled by obtained as part of TLS auth? In this case the source would not be a stapled OCSP response, but one fetched directly from the responder.

If we're talking only about the TLS extension, if you include the raw extension bytes they will contain the extension ID, which may be sufficient if CT 2.0 is ever implemented. (CT 2.0 uses the transparency_info extension.)


On Sat, Mar 1, 2025 at 5:43 PM Jamil Nimeh <jamil.j.ni...@oracle.com> wrote:

    Hello Ivan,

    You bring up an interesting idea, and it comes at a good time
    because we've been going back and taking another look at CT and
    SunJSSE.  What you are suggesting would be a useful addition, and
    could also be a step towards a full implementation.  I have
    created https://bugs.openjdk.org/browse/JDK-8351001 to track
    this.  It will need a CSR if we decide to go the
    ExtendedSSLSession route as you were suggesting.

    A question, since we're on the topic: Is there any value to
    separating out somehow 1.0 and 2.0 SCTs?  Or would a simple
    List<byte[]> that just contains each SCT be sufficient?

    Thanks,

    --Jamil

    On 2/28/2025 12:35 AM, Ivan Ristic wrote:
    Hello group,

    From what I can tell, it's currently not possible to consume CT
    information from Java reliably because there is no way to
    indicate support for the CT TLS extension [1] in the handshake as
    well as get the data sent back by a compatible server.

    The work involved would be small, for example just grab the raw
    data and expose it via ExtendedSSLSession, in the same way
    stapled OCSP responses are currently handled.

    However, the improvements would be significant, as this change
    would enable Java applications to use CT if they so wish.

    Apologies as I am not familiar with how things are done; what's
    the process to make this happen?

    [1] https://datatracker.ietf.org/doc/html/rfc6962#section-3.3
    
<https://urldefense.com/v3/__https://datatracker.ietf.org/doc/html/rfc6962*section-3.3__;Iw!!ACWV5N9M2RV99hQ!KIjWS6IHmhoDGv9tfyCSWMgzO-npdeXAxxTQG_s33nlcSE-1pfSaJwn8VVfEWUCHr3yHRBCy0GRmUkTxqSBjvmSW$>

-- Ivan



--
Ivan

Reply via email to