Skip to content

Commit e35d1ba

Browse files
authored
bpo-34271: Fix compatibility with 1.0.2 (GH-13728)
Fix various compatibility issues with LibreSSL and OpenSSL 1.0.2 introduced by bpo-34271. Signed-off-by: Christian Heimes <[email protected]>
1 parent 06651ee commit e35d1ba

File tree

4 files changed

+22
-46
lines changed

4 files changed

+22
-46
lines changed

Lib/ssl.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -658,12 +658,12 @@ def _msg_callback(self, callback):
658658
def inner(conn, direction, version, content_type, msg_type, data):
659659
try:
660660
version = TLSVersion(version)
661-
except TypeError:
661+
except ValueError:
662662
pass
663663

664664
try:
665665
content_type = _TLSContentType(content_type)
666-
except TypeError:
666+
except ValueError:
667667
pass
668668

669669
if content_type == _TLSContentType.HEADER:
@@ -674,7 +674,7 @@ def inner(conn, direction, version, content_type, msg_type, data):
674674
msg_enum = _TLSMessageType
675675
try:
676676
msg_type = msg_enum(msg_type)
677-
except TypeError:
677+
except ValueError:
678678
pass
679679

680680
return callback(conn, direction, version,

Lib/test/test_ssl.py

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3703,7 +3703,7 @@ def test_min_max_version(self):
37033703
# client 1.0, server 1.2 (mismatch)
37043704
server_context.minimum_version = ssl.TLSVersion.TLSv1_2
37053705
server_context.maximum_version = ssl.TLSVersion.TLSv1_2
3706-
client_context.minimum_version = ssl.TLSVersion.TLSv1
3706+
client_context.maximum_version = ssl.TLSVersion.TLSv1
37073707
client_context.maximum_version = ssl.TLSVersion.TLSv1
37083708
with ThreadedEchoServer(context=server_context) as server:
37093709
with client_context.wrap_socket(socket.socket(),
@@ -4529,50 +4529,16 @@ def msg_cb(conn, direction, version, content_type, msg_type, data):
45294529
server_hostname=hostname) as s:
45304530
s.connect((HOST, server.port))
45314531

4532-
self.assertEqual(msg, [
4533-
("write", TLSVersion.TLSv1, _TLSContentType.HEADER,
4534-
_TLSMessageType.CERTIFICATE_STATUS),
4535-
("write", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4536-
_TLSMessageType.CLIENT_HELLO),
4537-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4538-
_TLSMessageType.CERTIFICATE_STATUS),
4539-
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4540-
_TLSMessageType.SERVER_HELLO),
4541-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4542-
_TLSMessageType.CERTIFICATE_STATUS),
4543-
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4544-
_TLSMessageType.CERTIFICATE),
4545-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4546-
_TLSMessageType.CERTIFICATE_STATUS),
4532+
self.assertIn(
45474533
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
45484534
_TLSMessageType.SERVER_KEY_EXCHANGE),
4549-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4550-
_TLSMessageType.CERTIFICATE_STATUS),
4551-
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4552-
_TLSMessageType.SERVER_DONE),
4553-
("write", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4554-
_TLSMessageType.CERTIFICATE_STATUS),
4555-
("write", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4556-
_TLSMessageType.CLIENT_KEY_EXCHANGE),
4557-
("write", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4558-
_TLSMessageType.FINISHED),
4535+
msg
4536+
)
4537+
self.assertIn(
45594538
("write", TLSVersion.TLSv1_2, _TLSContentType.CHANGE_CIPHER_SPEC,
45604539
_TLSMessageType.CHANGE_CIPHER_SPEC),
4561-
("write", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4562-
_TLSMessageType.CERTIFICATE_STATUS),
4563-
("write", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4564-
_TLSMessageType.FINISHED),
4565-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4566-
_TLSMessageType.CERTIFICATE_STATUS),
4567-
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4568-
_TLSMessageType.NEWSESSION_TICKET),
4569-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4570-
_TLSMessageType.FINISHED),
4571-
("read", TLSVersion.TLSv1_2, _TLSContentType.HEADER,
4572-
_TLSMessageType.CERTIFICATE_STATUS),
4573-
("read", TLSVersion.TLSv1_2, _TLSContentType.HANDSHAKE,
4574-
_TLSMessageType.FINISHED),
4575-
])
4540+
msg
4541+
)
45764542

45774543

45784544
def test_main(verbose=False):

Modules/_ssl/debughelpers.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
/* Debug helpers */
22

3+
#ifndef SSL3_MT_CHANGE_CIPHER_SPEC
4+
/* Dummy message type for handling CCS like a normal handshake message
5+
* not defined in OpenSSL 1.0.2
6+
*/
7+
#define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101
8+
#endif
9+
310
static void
411
_PySSL_msg_callback(int write_p, int version, int content_type,
512
const void *buf, size_t len, SSL *ssl, void *arg)
@@ -41,11 +48,13 @@ _PySSL_msg_callback(int write_p, int version, int content_type,
4148
case SSL3_RT_HANDSHAKE:
4249
msg_type = (int)cbuf[0];
4350
break;
51+
#ifdef SSL3_RT_HEADER
4452
case SSL3_RT_HEADER:
4553
/* frame header encodes version in bytes 1..2 */
4654
version = cbuf[1] << 8 | cbuf[2];
4755
msg_type = (int)cbuf[0];
4856
break;
57+
#endif
4958
#ifdef SSL3_RT_INNER_CONTENT_TYPE
5059
case SSL3_RT_INNER_CONTENT_TYPE:
5160
msg_type = (int)cbuf[0];
@@ -210,4 +219,4 @@ _PySSLContext_set_keylog_filename(PySSLContext *self, PyObject *arg, void *c) {
210219
return 0;
211220
}
212221

213-
#endif
222+
#endif

Tools/ssl/multissltests.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,11 @@
5151
]
5252

5353
LIBRESSL_OLD_VERSIONS = [
54+
"2.9.2",
5455
]
5556

5657
LIBRESSL_RECENT_VERSIONS = [
57-
"2.7.4",
58+
"2.8.3",
5859
]
5960

6061
# store files in ../multissl

0 commit comments

Comments
 (0)