On Fri, Jun 15, 2012, Rob Stradling wrote:

> Using OpenSSL 1.x and Apache httpd 2.4.x, I've been trying to get
> OCSP Stapling to work with both an RSA cert and an ECC cert
> configured.  The desired behaviour is (obviously) that httpd should
> staple the correct OCSP Response for whichever cert (RSA or ECC) it
> chooses to send to the client.  However, I've found that it always
> staples the OCSP Response for the ECC cert, even when it sends the
> RSA cert.
> 
> ssl_util_stapling.c in httpd 2.4.x calls SSL_get_certificate(), but
> this function appears to have no knowledge of which server cert will
> actually be sent to the client.  I've been trying to work out how to
> fix the httpd code, but it doesn't look like the OpenSSL API
> provides a clean solution.
> 
> The ssl_get_server_send_cert() function defined in ssl_lib.c would
> be ideal here, but since it's declared in ssl_locl.h it's not
> intended to be available to applications.
> 
> But even if ssl_get_server_send_cert() was publicly accessible, I
> don't think it would actually work properly.  The Stapling Callback
> function (s->ctx->tlsext_status_cb) is called when parsing the
> ClientHello message, which I believe takes place before the server
> has decided which cipher to use.  And ssl_get_server_send_cert()
> needs to know which cipher has been selected.
> 
> Is there a way to patch httpd so that it can work around the
> limitations in the OpenSSL API and always send the correct OCSP
> Response?
> 
> Possible changes to OpenSSL:
> Should the Stapling Callback function be called later in the
> handshake (perhaps in ssl_add_serverhello_tlsext()), after the
> cipher has been selected?
> Should ssl_get_server_send_cert() be made available for applications
> to call?  Or should SSL_get_certificate() be updated so that it
> always returns the cert that the server will actually send?
> 

I can't immediately think of a clean solution to this problem. I think it
makes sense for OpenSSL to return the server certificate actually used via
SSL_get_certificate().

See if adding:

c->key = c->pkeys + i;

to ssl_get_server_send_cert fixes this.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to