|
20 | 20 | ssl = None |
21 | 21 |
|
22 | 22 | CERTFILE = None |
| 23 | +CAFILE = None |
23 | 24 |
|
24 | 25 |
|
25 | 26 | class TestImaplib(unittest.TestCase): |
@@ -348,6 +349,25 @@ class ThreadedNetworkedTestsSSL(BaseThreadedNetworkedTests): |
348 | 349 | server_class = SecureTCPServer |
349 | 350 | imap_class = IMAP4_SSL |
350 | 351 |
|
| 352 | + @reap_threads |
| 353 | + def test_ssl_verified(self): |
| 354 | + ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) |
| 355 | + ssl_context.verify_mode = ssl.CERT_REQUIRED |
| 356 | + ssl_context.check_hostname = True |
| 357 | + ssl_context.load_verify_locations(CAFILE) |
| 358 | + |
| 359 | + with self.assertRaisesRegex(ssl.CertificateError, |
| 360 | + "hostname '127.0.0.1' doesn't match 'localhost'"): |
| 361 | + with self.reaped_server(SimpleIMAPHandler) as server: |
| 362 | + client = self.imap_class(*server.server_address, |
| 363 | + ssl_context=ssl_context) |
| 364 | + client.shutdown() |
| 365 | + |
| 366 | + with self.reaped_server(SimpleIMAPHandler) as server: |
| 367 | + client = self.imap_class("localhost", server.server_address[1], |
| 368 | + ssl_context=ssl_context) |
| 369 | + client.shutdown() |
| 370 | + |
351 | 371 |
|
352 | 372 | class RemoteIMAPTest(unittest.TestCase): |
353 | 373 | host = 'cyrus.andrew.cmu.edu' |
@@ -460,11 +480,15 @@ def load_tests(*args): |
460 | 480 |
|
461 | 481 | if support.is_resource_enabled('network'): |
462 | 482 | if ssl: |
463 | | - global CERTFILE |
| 483 | + global CERTFILE, CAFILE |
464 | 484 | CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, |
465 | | - "keycert.pem") |
| 485 | + "keycert3.pem") |
466 | 486 | if not os.path.exists(CERTFILE): |
467 | 487 | raise support.TestFailed("Can't read certificate files!") |
| 488 | + CAFILE = os.path.join(os.path.dirname(__file__) or os.curdir, |
| 489 | + "pycacert.pem") |
| 490 | + if not os.path.exists(CAFILE): |
| 491 | + raise support.TestFailed("Can't read CA file!") |
468 | 492 | tests.extend([ |
469 | 493 | ThreadedNetworkedTests, ThreadedNetworkedTestsSSL, |
470 | 494 | RemoteIMAPTest, RemoteIMAP_SSLTest, RemoteIMAP_STARTTLSTest, |
|
0 commit comments