mirror of https://github.com/openssl/openssl.git
Reorder extensions to put SigAlgs last
Force non-empty padding extension. When enabled, force the padding extension to be at least 1 byte long. WebSphere application server cannot handle having an empty extension (e.g. EMS/EtM) as the last extension in a client hello. This moves the SigAlgs extension last for TLSv1.2 to avoid this issue. Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/3921)
This commit is contained in:
parent
326eaa941e
commit
10ed1b7239
|
|
@ -678,7 +678,6 @@ typedef enum tlsext_index_en {
|
|||
TLSEXT_IDX_ec_point_formats,
|
||||
TLSEXT_IDX_supported_groups,
|
||||
TLSEXT_IDX_session_ticket,
|
||||
TLSEXT_IDX_signature_algorithms,
|
||||
TLSEXT_IDX_status_request,
|
||||
TLSEXT_IDX_next_proto_neg,
|
||||
TLSEXT_IDX_application_layer_protocol_negotiation,
|
||||
|
|
@ -686,6 +685,7 @@ typedef enum tlsext_index_en {
|
|||
TLSEXT_IDX_encrypt_then_mac,
|
||||
TLSEXT_IDX_signed_certificate_timestamp,
|
||||
TLSEXT_IDX_extended_master_secret,
|
||||
TLSEXT_IDX_signature_algorithms,
|
||||
TLSEXT_IDX_supported_versions,
|
||||
TLSEXT_IDX_psk_kex_modes,
|
||||
TLSEXT_IDX_key_share,
|
||||
|
|
|
|||
|
|
@ -110,6 +110,9 @@ typedef struct extensions_definition_st {
|
|||
* extension is relevant to a particular protocol or protocol version.
|
||||
*
|
||||
* TODO(TLS1.3): Make sure we have a test to check the consistency of these
|
||||
*
|
||||
* NOTE: WebSphere Application Server 7+ cannot handle empty extensions at
|
||||
* the end, keep these extensions before signature_algorithm.
|
||||
*/
|
||||
#define INVALID_EXTENSION { 0x10000, 0, NULL, NULL, NULL, NULL, NULL, NULL }
|
||||
static const EXTENSION_DEFINITION ext_defs[] = {
|
||||
|
|
@ -167,13 +170,6 @@ static const EXTENSION_DEFINITION ext_defs[] = {
|
|||
tls_parse_stoc_session_ticket, tls_construct_stoc_session_ticket,
|
||||
tls_construct_ctos_session_ticket, NULL
|
||||
},
|
||||
{
|
||||
TLSEXT_TYPE_signature_algorithms,
|
||||
SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST,
|
||||
init_sig_algs, tls_parse_ctos_sig_algs,
|
||||
tls_parse_ctos_sig_algs, tls_construct_ctos_sig_algs,
|
||||
tls_construct_ctos_sig_algs, final_sig_algs
|
||||
},
|
||||
#ifndef OPENSSL_NO_OCSP
|
||||
{
|
||||
TLSEXT_TYPE_status_request,
|
||||
|
|
@ -249,6 +245,13 @@ static const EXTENSION_DEFINITION ext_defs[] = {
|
|||
init_ems, tls_parse_ctos_ems, tls_parse_stoc_ems,
|
||||
tls_construct_stoc_ems, tls_construct_ctos_ems, final_ems
|
||||
},
|
||||
{
|
||||
TLSEXT_TYPE_signature_algorithms,
|
||||
SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST,
|
||||
init_sig_algs, tls_parse_ctos_sig_algs,
|
||||
tls_parse_ctos_sig_algs, tls_construct_ctos_sig_algs,
|
||||
tls_construct_ctos_sig_algs, final_sig_algs
|
||||
},
|
||||
{
|
||||
TLSEXT_TYPE_supported_versions,
|
||||
SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS_IMPLEMENTATION_ONLY
|
||||
|
|
|
|||
|
|
@ -765,12 +765,14 @@ EXT_RETURN tls_construct_ctos_padding(SSL *s, WPACKET *pkt,
|
|||
|
||||
/*
|
||||
* Take off the size of extension header itself (2 bytes for type and
|
||||
* 2 bytes for length bytes)
|
||||
* 2 bytes for length bytes), but ensure that the extension is at least
|
||||
* 1 byte long so as not to have an empty extension last (WebSphere 7.x,
|
||||
* 8.x are intolerant of that condition)
|
||||
*/
|
||||
if (hlen >= 4)
|
||||
hlen -= 4;
|
||||
else
|
||||
hlen = 0;
|
||||
hlen = 1;
|
||||
|
||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_padding)
|
||||
|| !WPACKET_sub_allocate_bytes_u16(pkt, hlen, &padbytes)) {
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ static int full_early_callback(SSL *s, int *al, void *arg)
|
|||
#ifndef OPENSSL_NO_EC
|
||||
11, 10,
|
||||
#endif
|
||||
35, 13, 22, 23};
|
||||
35, 22, 23, 13};
|
||||
size_t len;
|
||||
|
||||
/* Make sure we can defer processing and get called back. */
|
||||
|
|
|
|||
Loading…
Reference in New Issue