c7ce977fb9
SSL 3.0 used to have a nice and simple rule around extensions. They don't exist. And then RFC 5746 came along and made this all extremely confusing. In an SSL 3.0 server, rather than blocking ServerHello extension emission when renegotiation_info is missing, ignore all ClientHello extensions but renegotiation_info. This avoids a mismatch between local state and the extensions with emit. Notably if, for some reason, a ClientHello includes the session_ticket extension, does NOT include renegotiation_info or the SCSV, and yet the client or server are decrepit enough to negotiate SSL 3.0, the connection will fail due to unexpected NewSessionTicket message. See https://crbug.com/425979#c9 for a discussion of something similar that came up in diagnosing https://poodle.io/'s buggy POODLE check. This is analogous to upstream's 5a3d8eebb7667b32af0ccc3f12f314df6809d32d. (Not supporting renego as a server in any form anyway, we may as well completely ignore extensions, but then our extensions callbacks can't assume the parse hooks are always called. This way the various NULL handlers still function.) Change-Id: Ie689a0e9ffb0369ef7a20ab4231005e87f32d5f8 Reviewed-on: https://boringssl-review.googlesource.com/6180 Reviewed-by: Adam Langley <agl@google.com> |
||
---|---|---|
.. | ||
pqueue | ||
test | ||
CMakeLists.txt | ||
custom_extensions.c | ||
d1_both.c | ||
d1_clnt.c | ||
d1_lib.c | ||
d1_meth.c | ||
d1_pkt.c | ||
d1_srtp.c | ||
d1_srvr.c | ||
dtls_record.c | ||
internal.h | ||
s3_both.c | ||
s3_clnt.c | ||
s3_enc.c | ||
s3_lib.c | ||
s3_meth.c | ||
s3_pkt.c | ||
s3_srvr.c | ||
ssl_aead_ctx.c | ||
ssl_asn1.c | ||
ssl_buffer.c | ||
ssl_cert.c | ||
ssl_cipher.c | ||
ssl_file.c | ||
ssl_lib.c | ||
ssl_rsa.c | ||
ssl_session.c | ||
ssl_stat.c | ||
ssl_test.cc | ||
ssl_txt.c | ||
t1_enc.c | ||
t1_lib.c | ||
tls_record.c |