Stapled OCSP responses for intermediate certs
Benjamin Kaduk
bkaduk at akamai.com
Mon Mar 6 17:11:02 UTC 2023
Hi Akshath,
I don't know of any APIs provided by OpenSSL for parsing the Certificate message
(the ones I think you found for the ClientHello are specific to the context of the
client_hello callback I mentioned, and even they leave a fair amount of parsing to the caller).
The internal parser code is roughly at
https://github.com/openssl/openssl/blob/master/ssl/statem/statem_clnt.c#L1853
but extracting it for standalone use would require a fair bit of effort and
understanding of the wire protocol. I do recommend using an abstraction for counted
byte buffers akin to the PACKET_* APIs here (or boringssl's CBB APIs) to avoid buffer
overflow attacks when parsing.
-Ben
On Mon, Mar 06, 2023 at 10:05:15PM +0530, Akshath Hegde wrote:
> Hi Benjamin,
> Thanks a lot for the information. I'm trying out
> SSL_CTX_set_msg_callback() now. Are there any parsers available for
> extracting contents of Certificate message?. I have been searching and I
> could see them for ClientHello but not the others.
> Thanks
> Akshath
> On Fri, Mar 3, 2023 at 6:08 AM Benjamin Kaduk <[1]bkaduk at akamai.com>
> wrote:
>
> I don't know about (1) offhand, but (inline)
>
> On Thu, Mar 02, 2023 at 05:25:48PM +0530, Akshath Hegde wrote:
> > Hi,
> > I had few questions about OCSP stapling for intermediate
> certificates.
> > On the client side I'm adding "certificate status request"
> extension to
> > ClientHello message. For server, Im using an apache httpd server
> which has
> > OCSP responder details configured in ssl module. THe negotiated TLS
> > version is 1.3
> > 1)The server has a multi tier cert chain. But it seems to be
> sending the
> > OCSP response for only the end entity certificate. Apache
> documentation
> > seems to suggest this is expected and multi-stapling is not
> supported. Is
> > anyone aware of a http server that supports multi-stapling?
> > 2)On the client side, I'm registering for the OCSP response
> callback with
> > SSL_CTX_set_tlsext_status_cb.
> > In case of a multi tiered cert chain and OCSP response for each
> cert, is
> > this callback called once for each response?, or only one time?
> > If its called only only one time, how are the responses accessed?
> > SSL_get_tlsext_status_ocsp_response -> seems to return only one
> OCSP
> > response.
> > And I haven't been able to try tis for the lack of multi-stapling
> support
> > in http server
>
> It looks like it is just called once at the end of processing the
> server's first flight.
> The API was clearly designed prior to TLS 1.3 and not modernized as part
> of the TLS 1.3 implementation;
> the updates were pretty minimal (see commit
> 7776a36cfa5853175a858fa32983f22f36513171 that just generalizes
> from "process ServerDone" to "process server's first flight").
>
> For TLS 1.3 you only get the response for the end-entity certificate; we
> specifically ignore the extension for other certificates in the chain.
>
> > 3)The OCSP response callback seems to be called after the cert
> chain
> > verification callback has ended. Is there any reason for this?. The
> > authenticity of OCSP response is established by a different chain
> (OCSP
> > response -> CA that signed cert), and doesn't need to wait for the
> server
> > end entity verification?. So instead of CRL, OCSP could have been
> used
> > during cert chain verification
>
> I did not specifically go dig into the VCS history, but in general
> OpenSSL's
> callback interfaces are not part of a intentional wholistic design; most
> were
> added as one-offs to meet a specific purpose and they often can interact
> with
> each other in quite unfortunate ways. On the server side, many of the
> callbacks are mostly superseded by the "client hello callback" that runs
> very
> early and has well-defined interactions with other callbacks (and can
> act
> before libssl has started processing anything), at the cost of needing
> to do
> more parsing of the data by hand. That doesn't help you here, of
> course; if
> you need to see all the OCSP responses you will probably need to use a
> message
> callback (SSL_CTX_set_msg_callback()) in order to get access to the
> multi-staple.
>
> -Ben
>
> Links:
> 1. mailto:bkaduk at akamai.com/
More information about the openssl-users
mailing list