mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
bpo-31431: SSLContext.check_hostname auto-sets CERT_REQUIRED (#3531)
Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
parent
a170fa162d
commit
e82c034496
4 changed files with 44 additions and 11 deletions
|
@ -1363,24 +1363,45 @@ class ContextTests(unittest.TestCase):
|
|||
def test_check_hostname(self):
|
||||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
||||
self.assertFalse(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
|
||||
|
||||
# Requires CERT_REQUIRED or CERT_OPTIONAL
|
||||
with self.assertRaises(ValueError):
|
||||
ctx.check_hostname = True
|
||||
# Auto set CERT_REQUIRED
|
||||
ctx.check_hostname = True
|
||||
self.assertTrue(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_REQUIRED
|
||||
self.assertFalse(ctx.check_hostname)
|
||||
ctx.check_hostname = True
|
||||
self.assertTrue(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
|
||||
|
||||
ctx.verify_mode = ssl.CERT_OPTIONAL
|
||||
# Changing verify_mode does not affect check_hostname
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
ctx.check_hostname = False
|
||||
self.assertFalse(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
|
||||
# Auto set
|
||||
ctx.check_hostname = True
|
||||
self.assertTrue(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
|
||||
|
||||
ctx.check_hostname = False
|
||||
ctx.verify_mode = ssl.CERT_OPTIONAL
|
||||
ctx.check_hostname = False
|
||||
self.assertFalse(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_OPTIONAL)
|
||||
# keep CERT_OPTIONAL
|
||||
ctx.check_hostname = True
|
||||
self.assertTrue(ctx.check_hostname)
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_OPTIONAL)
|
||||
|
||||
# Cannot set CERT_NONE with check_hostname enabled
|
||||
with self.assertRaises(ValueError):
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
ctx.check_hostname = False
|
||||
self.assertFalse(ctx.check_hostname)
|
||||
ctx.verify_mode = ssl.CERT_NONE
|
||||
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
|
||||
|
||||
def test_context_client_server(self):
|
||||
# PROTOCOL_TLS_CLIENT has sane defaults
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue