|
33 | 33 | IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1)
|
34 | 34 | PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS')
|
35 | 35 |
|
| 36 | +PROTOCOL_TO_TLS_VERSION = {} |
| 37 | +for proto, ver in ( |
| 38 | + ("PROTOCOL_SSLv23", "SSLv3"), |
| 39 | + ("PROTOCOL_TLSv1", "TLSv1"), |
| 40 | + ("PROTOCOL_TLSv1_1", "TLSv1_1"), |
| 41 | +): |
| 42 | + try: |
| 43 | + proto = getattr(ssl, proto) |
| 44 | + ver = getattr(ssl.TLSVersion, ver) |
| 45 | + except AttributeError: |
| 46 | + continue |
| 47 | + PROTOCOL_TO_TLS_VERSION[proto] = ver |
| 48 | + |
36 | 49 | def data_file(*name):
|
37 | 50 | return os.path.join(os.path.dirname(__file__), *name)
|
38 | 51 |
|
@@ -1092,7 +1105,11 @@ def test_min_max_version(self):
|
1092 | 1105 | # Fedora override the setting to TLS 1.0.
|
1093 | 1106 | self.assertIn(
|
1094 | 1107 | ctx.minimum_version,
|
1095 |
| - {ssl.TLSVersion.MINIMUM_SUPPORTED, ssl.TLSVersion.TLSv1} |
| 1108 | + {ssl.TLSVersion.MINIMUM_SUPPORTED, |
| 1109 | + # Fedora 29 uses TLS 1.0 by default |
| 1110 | + ssl.TLSVersion.TLSv1, |
| 1111 | + # RHEL 8 uses TLS 1.2 by default |
| 1112 | + ssl.TLSVersion.TLSv1_2} |
1096 | 1113 | )
|
1097 | 1114 | self.assertEqual(
|
1098 | 1115 | ctx.maximum_version, ssl.TLSVersion.MAXIMUM_SUPPORTED
|
@@ -2609,6 +2626,17 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success,
|
2609 | 2626 | server_context = ssl.SSLContext(server_protocol)
|
2610 | 2627 | server_context.options |= server_options
|
2611 | 2628 |
|
| 2629 | + min_version = PROTOCOL_TO_TLS_VERSION.get(client_protocol, None) |
| 2630 | + if (min_version is not None |
| 2631 | + # SSLContext.minimum_version is only available on recent OpenSSL |
| 2632 | + # (setter added in OpenSSL 1.1.0, getter added in OpenSSL 1.1.1) |
| 2633 | + and hasattr(server_context, 'minimum_version') |
| 2634 | + and server_protocol == ssl.PROTOCOL_TLS |
| 2635 | + and server_context.minimum_version > min_version): |
| 2636 | + # If OpenSSL configuration is strict and requires more recent TLS |
| 2637 | + # version, we have to change the minimum to test old TLS versions. |
| 2638 | + server_context.minimum_version = min_version |
| 2639 | + |
2612 | 2640 | # NOTE: we must enable "ALL" ciphers on the client, otherwise an
|
2613 | 2641 | # SSLv23 client will send an SSLv3 hello (rather than SSLv2)
|
2614 | 2642 | # starting from OpenSSL 1.0.0 (see issue #8322).
|
|
0 commit comments