diff options
Diffstat (limited to 'ssl/statem/statem_clnt.c')
| -rw-r--r-- | ssl/statem/statem_clnt.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/ssl/statem/statem_clnt.c b/ssl/statem/statem_clnt.c index 8c658da8990d..0a11b88183e3 100644 --- a/ssl/statem/statem_clnt.c +++ b/ssl/statem/statem_clnt.c @@ -1095,6 +1095,7 @@ WORK_STATE ossl_statem_client_post_process_message(SSL *s, WORK_STATE wst)                   ERR_R_INTERNAL_ERROR);          return WORK_ERROR; +    case TLS_ST_CR_CERT_VRFY:      case TLS_ST_CR_CERT_REQ:          return tls_prepare_client_certificate(s, wst);      } @@ -2563,6 +2564,17 @@ MSG_PROCESS_RETURN tls_process_certificate_request(SSL *s, PACKET *pkt)      /* we should setup a certificate to return.... */      s->s3->tmp.cert_req = 1; +    /* +     * In TLSv1.3 we don't prepare the client certificate yet. We wait until +     * after the CertificateVerify message has been received. This is because +     * in TLSv1.3 the CertificateRequest arrives before the Certificate message +     * but in TLSv1.2 it is the other way around. We want to make sure that +     * SSL_get_peer_certificate() returns something sensible in +     * client_cert_cb. +     */ +    if (SSL_IS_TLS13(s) && s->post_handshake_auth != SSL_PHA_REQUESTED) +        return MSG_PROCESS_CONTINUE_READING; +      return MSG_PROCESS_CONTINUE_PROCESSING;  } | 
