|
34 | 34 | IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1) |
35 | 35 | PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS') |
36 | 36 |
|
| 37 | +PROTOCOL_TO_TLS_VERSION = {} |
| 38 | +for proto, ver in ( |
| 39 | + ("PROTOCOL_SSLv23", "SSLv3"), |
| 40 | + ("PROTOCOL_TLSv1", "TLSv1"), |
| 41 | + ("PROTOCOL_TLSv1_1", "TLSv1_1"), |
| 42 | +): |
| 43 | + try: |
| 44 | + proto = getattr(ssl, proto) |
| 45 | + ver = getattr(ssl.TLSVersion, ver) |
| 46 | + except AttributeError: |
| 47 | + continue |
| 48 | + PROTOCOL_TO_TLS_VERSION[proto] = ver |
| 49 | + |
37 | 50 | def data_file(*name): |
38 | 51 | return os.path.join(os.path.dirname(__file__), *name) |
39 | 52 |
|
@@ -1112,7 +1125,11 @@ def test_min_max_version(self): |
1112 | 1125 | # Fedora override the setting to TLS 1.0. |
1113 | 1126 | self.assertIn( |
1114 | 1127 | ctx.minimum_version, |
1115 | | - {ssl.TLSVersion.MINIMUM_SUPPORTED, ssl.TLSVersion.TLSv1} |
| 1128 | + {ssl.TLSVersion.MINIMUM_SUPPORTED, |
| 1129 | + # Fedora 29 uses TLS 1.0 by default |
| 1130 | + ssl.TLSVersion.TLSv1, |
| 1131 | + # RHEL 8 uses TLS 1.2 by default |
| 1132 | + ssl.TLSVersion.TLSv1_2} |
1116 | 1133 | ) |
1117 | 1134 | self.assertEqual( |
1118 | 1135 | ctx.maximum_version, ssl.TLSVersion.MAXIMUM_SUPPORTED |
@@ -2630,6 +2647,17 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success, |
2630 | 2647 | server_context = ssl.SSLContext(server_protocol) |
2631 | 2648 | server_context.options |= server_options |
2632 | 2649 |
|
| 2650 | + min_version = PROTOCOL_TO_TLS_VERSION.get(client_protocol, None) |
| 2651 | + if (min_version is not None |
| 2652 | + # SSLContext.minimum_version is only available on recent OpenSSL |
| 2653 | + # (setter added in OpenSSL 1.1.0, getter added in OpenSSL 1.1.1) |
| 2654 | + and hasattr(server_context, 'minimum_version') |
| 2655 | + and server_protocol == ssl.PROTOCOL_TLS |
| 2656 | + and server_context.minimum_version > min_version): |
| 2657 | + # If OpenSSL configuration is strict and requires more recent TLS |
| 2658 | + # version, we have to change the minimum to test old TLS versions. |
| 2659 | + server_context.minimum_version = min_version |
| 2660 | + |
2633 | 2661 | # NOTE: we must enable "ALL" ciphers on the client, otherwise an |
2634 | 2662 | # SSLv23 client will send an SSLv3 hello (rather than SSLv2) |
2635 | 2663 | # starting from OpenSSL 1.0.0 (see issue #8322). |
|
0 commit comments