提交 e5db9c3b 编写于 作者: D Dr. Stephen Henson

Minor enhancement to PR#2836 fix. Instead of modifying SSL_get_certificate

change the current certificate (in s->cert->key) to the one used and then
SSL_get_certificate and SSL_get_privatekey will automatically work.
上级 2daceb03
...@@ -347,8 +347,8 @@ ...@@ -347,8 +347,8 @@
Changes between 1.0.1 and 1.0.2 [xx XXX xxxx] Changes between 1.0.1 and 1.0.2 [xx XXX xxxx]
*) Call OCSP Stapling callback after ciphersuite has been chosen, so *) Call OCSP Stapling callback after ciphersuite has been chosen, so
the right response is stapled. Also change SSL_get_certificate() the right response is stapled. Also change current certificate to
so it returns the certificate actually sent. the certificate actually sent.
See http://rt.openssl.org/Ticket/Display.html?id=2836. See http://rt.openssl.org/Ticket/Display.html?id=2836.
[Rob Stradling <rob.stradling@comodo.com>] [Rob Stradling <rob.stradling@comodo.com>]
......
...@@ -2833,14 +2833,6 @@ void ssl_clear_cipher_ctx(SSL *s) ...@@ -2833,14 +2833,6 @@ void ssl_clear_cipher_ctx(SSL *s)
/* Fix this function so that it takes an optional type parameter */ /* Fix this function so that it takes an optional type parameter */
X509 *SSL_get_certificate(const SSL *s) X509 *SSL_get_certificate(const SSL *s)
{ {
if (s->server)
{
CERT_PKEY *certpkey;
certpkey = ssl_get_server_send_pkey(s);
if (certpkey && certpkey->x509)
return certpkey->x509;
}
if (s->cert != NULL) if (s->cert != NULL)
return(s->cert->key->x509); return(s->cert->key->x509);
else else
......
...@@ -2755,6 +2755,18 @@ int ssl_check_clienthello_tlsext_late(SSL *s) ...@@ -2755,6 +2755,18 @@ int ssl_check_clienthello_tlsext_late(SSL *s)
if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb)
{ {
int r; int r;
CERT_PKEY *certpkey;
certpkey = ssl_get_server_send_pkey(s);
/* If no certificate can't return certificate status */
if (certpkey == NULL)
{
s->tlsext_status_expected = 0;
return 1;
}
/* Set current certificate to one we will use so
* SSL_get_certificate et al can pick it up.
*/
s->cert->key = certpkey;
r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg); r = s->ctx->tlsext_status_cb(s, s->ctx->tlsext_status_arg);
switch (r) switch (r)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册