mirror of
https://github.com/openssl/openssl.git
synced 2025-03-01 19:28:10 +08:00
New extensions can be sent in a certificate request
Normally we expect a client to send new extensions in the ClientHello, which may be echoed back by the server in subsequent messages. However the server can also send a new extension in the certificate request message to be echoed back in a certificate message Fixes #16632 Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/16634)
This commit is contained in:
parent
2b80a7490d
commit
cbb862fbaa
@ -145,11 +145,12 @@ int custom_ext_parse(SSL *s, unsigned int context, unsigned int ext_type,
|
||||
}
|
||||
|
||||
/*
|
||||
* Extensions received in the ClientHello are marked with the
|
||||
* SSL_EXT_FLAG_RECEIVED. This is so we know to add the equivalent
|
||||
* extensions in the ServerHello/EncryptedExtensions message
|
||||
* Extensions received in the ClientHello or CertificateRequest are marked
|
||||
* with the SSL_EXT_FLAG_RECEIVED. This is so we know to add the equivalent
|
||||
* extensions in the response messages
|
||||
*/
|
||||
if ((context & SSL_EXT_CLIENT_HELLO) != 0)
|
||||
if ((context & (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST))
|
||||
!= 0)
|
||||
meth->ext_flags |= SSL_EXT_FLAG_RECEIVED;
|
||||
|
||||
/* If no parse function set return success */
|
||||
@ -191,7 +192,7 @@ int custom_ext_add(SSL *s, int context, WPACKET *pkt, X509 *x, size_t chainidx,
|
||||
| SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
|
||||
| SSL_EXT_TLS1_3_CERTIFICATE
|
||||
| SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST)) != 0) {
|
||||
/* Only send extensions present in ClientHello. */
|
||||
/* Only send extensions present in ClientHello/CertificateRequest */
|
||||
if (!(meth->ext_flags & SSL_EXT_FLAG_RECEIVED))
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user