summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2022-12-20 07:10:30 (GMT)
committerGitHub <noreply@github.com>2022-12-20 07:10:30 (GMT)
commit79ccc03b62d819d83e592c6c8038545d9263a0d4 (patch)
tree5f2ea0fd8dd17d889c59d7dd8a3c2adec0d526ee
parent36a0b1d0dddbdf324d98071ea31e7e9151eea6d5 (diff)
downloadcpython-79ccc03b62d819d83e592c6c8038545d9263a0d4.zip
cpython-79ccc03b62d819d83e592c6c8038545d9263a0d4.tar.gz
cpython-79ccc03b62d819d83e592c6c8038545d9263a0d4.tar.bz2
gh-89051: Add ssl.OP_LEGACY_SERVER_CONNECT (#93927)
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Christian Heimes <christian@python.org> Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com> Fixes https://github.com/python/cpython/issues/89051
-rw-r--r--Doc/library/ssl.rst7
-rw-r--r--Lib/test/test_ssl.py16
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-06-17-08-00-34.gh-issue-89051.yP4Na0.rst1
-rw-r--r--Modules/_ssl.c2
4 files changed, 26 insertions, 0 deletions
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 08824fe..78d44a2 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -823,6 +823,13 @@ Constants
.. versionadded:: 3.12
+.. data:: OP_LEGACY_SERVER_CONNECT
+
+ Allow legacy insecure renegotiation between OpenSSL and unpatched servers
+ only.
+
+ .. versionadded:: 3.12
+
.. data:: HAS_ALPN
Whether the OpenSSL library has built-in support for the *Application-Layer
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index e926fc5..d4eb2d2 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -1461,6 +1461,8 @@ class ContextTests(unittest.TestCase):
if OP_CIPHER_SERVER_PREFERENCE != 0:
self.assertEqual(ctx.options & OP_CIPHER_SERVER_PREFERENCE,
OP_CIPHER_SERVER_PREFERENCE)
+ self.assertEqual(ctx.options & ssl.OP_LEGACY_SERVER_CONNECT,
+ 0 if IS_OPENSSL_3_0_0 else ssl.OP_LEGACY_SERVER_CONNECT)
def test_create_default_context(self):
ctx = ssl.create_default_context()
@@ -3815,6 +3817,20 @@ class ThreadedTests(unittest.TestCase):
sni_name=hostname)
self.assertIs(stats['compression'], None)
+ def test_legacy_server_connect(self):
+ client_context, server_context, hostname = testing_context()
+ client_context.options |= ssl.OP_LEGACY_SERVER_CONNECT
+ server_params_test(client_context, server_context,
+ chatty=True, connectionchatty=True,
+ sni_name=hostname)
+
+ def test_no_legacy_server_connect(self):
+ client_context, server_context, hostname = testing_context()
+ client_context.options &= ~ssl.OP_LEGACY_SERVER_CONNECT
+ server_params_test(client_context, server_context,
+ chatty=True, connectionchatty=True,
+ sni_name=hostname)
+
@unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
def test_dh_params(self):
# Check we can get a connection with ephemeral Diffie-Hellman
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-06-17-08-00-34.gh-issue-89051.yP4Na0.rst b/Misc/NEWS.d/next/Core and Builtins/2022-06-17-08-00-34.gh-issue-89051.yP4Na0.rst
new file mode 100644
index 0000000..5c81648
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-06-17-08-00-34.gh-issue-89051.yP4Na0.rst
@@ -0,0 +1 @@
+Add :data:`ssl.OP_LEGACY_SERVER_CONNECT`
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 591eb91..8f03a84 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -5845,6 +5845,8 @@ sslmodule_init_constants(PyObject *m)
SSL_OP_CIPHER_SERVER_PREFERENCE);
PyModule_AddIntConstant(m, "OP_SINGLE_DH_USE", SSL_OP_SINGLE_DH_USE);
PyModule_AddIntConstant(m, "OP_NO_TICKET", SSL_OP_NO_TICKET);
+ PyModule_AddIntConstant(m, "OP_LEGACY_SERVER_CONNECT",
+ SSL_OP_LEGACY_SERVER_CONNECT);
#ifdef SSL_OP_SINGLE_ECDH_USE
PyModule_AddIntConstant(m, "OP_SINGLE_ECDH_USE", SSL_OP_SINGLE_ECDH_USE);
#endif