merge 3.4 (#22959)
This commit is contained in:
commit
b46247bee5
|
@ -69,17 +69,12 @@ The module provides the following classes:
|
|||
*key_file* and *cert_file* are deprecated, please use
|
||||
:meth:`ssl.SSLContext.load_cert_chain` instead, or let
|
||||
:func:`ssl.create_default_context` select the system's trusted CA
|
||||
certificates for you.
|
||||
certificates for you. The *check_hostname* parameter is also deprecated; the
|
||||
:attr:`SSLContext.check_hostname` attribute of *context* should be used
|
||||
instead.
|
||||
|
||||
Please read :ref:`ssl-security` for more information on best practices.
|
||||
|
||||
.. note::
|
||||
If *context* is specified and has a :attr:`~ssl.SSLContext.verify_mode`
|
||||
of either :data:`~ssl.CERT_OPTIONAL` or :data:`~ssl.CERT_REQUIRED`, then
|
||||
by default *host* is matched against the host name(s) allowed by the
|
||||
server's certificate. If you want to change that behaviour, you can
|
||||
explicitly set *check_hostname* to False.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
*source_address*, *context* and *check_hostname* were added.
|
||||
|
||||
|
|
|
@ -1274,8 +1274,8 @@ else:
|
|||
context = ssl._create_default_https_context()
|
||||
will_verify = context.verify_mode != ssl.CERT_NONE
|
||||
if check_hostname is None:
|
||||
check_hostname = will_verify
|
||||
elif check_hostname and not will_verify:
|
||||
check_hostname = context.check_hostname
|
||||
if check_hostname and not will_verify:
|
||||
raise ValueError("check_hostname needs a SSL context with "
|
||||
"either CERT_OPTIONAL or CERT_REQUIRED")
|
||||
if key_file or cert_file:
|
||||
|
|
|
@ -1113,6 +1113,7 @@ class HTTPSTest(TestCase):
|
|||
server = self.make_server(CERT_fakehostname)
|
||||
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
|
||||
context.verify_mode = ssl.CERT_REQUIRED
|
||||
context.check_hostname = True
|
||||
context.load_verify_locations(CERT_fakehostname)
|
||||
h = client.HTTPSConnection('localhost', server.port, context=context)
|
||||
with self.assertRaises(ssl.CertificateError):
|
||||
|
@ -1123,11 +1124,24 @@ class HTTPSTest(TestCase):
|
|||
with self.assertRaises(ssl.CertificateError):
|
||||
h.request('GET', '/')
|
||||
# With check_hostname=False, the mismatching is ignored
|
||||
context.check_hostname = False
|
||||
h = client.HTTPSConnection('localhost', server.port, context=context,
|
||||
check_hostname=False)
|
||||
h.request('GET', '/nonexistent')
|
||||
resp = h.getresponse()
|
||||
self.assertEqual(resp.status, 404)
|
||||
# The context's check_hostname setting is used if one isn't passed to
|
||||
# HTTPSConnection.
|
||||
context.check_hostname = False
|
||||
h = client.HTTPSConnection('localhost', server.port, context=context)
|
||||
h.request('GET', '/nonexistent')
|
||||
self.assertEqual(h.getresponse().status, 404)
|
||||
# Passing check_hostname to HTTPSConnection should override the
|
||||
# context's setting.
|
||||
h = client.HTTPSConnection('localhost', server.port, context=context,
|
||||
check_hostname=True)
|
||||
with self.assertRaises(ssl.CertificateError):
|
||||
h.request('GET', '/')
|
||||
|
||||
@unittest.skipIf(not hasattr(client, 'HTTPSConnection'),
|
||||
'http.client.HTTPSConnection not available')
|
||||
|
|
|
@ -194,6 +194,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #22959: In the constructor of http.client.HTTPSConnection, prefer the
|
||||
context's check_hostname attribute over the *check_hostname* parameter.
|
||||
|
||||
- Issue #22696: Add function :func:`sys.is_finalizing` to know about
|
||||
interpreter shutdown.
|
||||
|
||||
|
|
Loading…
Reference in New Issue