annotate Lib/test/test_ssl.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 683295cf9489
children 827bb0554f1f f8c9d131eb66
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1 # Test the support for SSL and sockets
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
2
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
3 import sys
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
4 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
5 from test import support
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
6 import socket
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
7 import select
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
8 import time
60911
95c5e094b380 Merged revisions 80429 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60908
diff changeset
9 import gc
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
10 import os
60911
95c5e094b380 Merged revisions 80429 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60908
diff changeset
11 import errno
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
12 import pprint
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
13 import tempfile
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
14 import urllib.request
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
15 import traceback
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
16 import asyncore
60908
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
17 import weakref
63740
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
18 import platform
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
19 import functools
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
20
65252
e517c3f56091 Let test_ssl fail gracefully if ssl support is not available
Antoine Pitrou <solipsis@pitrou.net>
parents: 65247
diff changeset
21 ssl = support.import_module("ssl")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
22
65252
e517c3f56091 Let test_ssl fail gracefully if ssl support is not available
Antoine Pitrou <solipsis@pitrou.net>
parents: 65247
diff changeset
23 PROTOCOLS = [
69998
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
24 ssl.PROTOCOL_SSLv3,
65252
e517c3f56091 Let test_ssl fail gracefully if ssl support is not available
Antoine Pitrou <solipsis@pitrou.net>
parents: 65247
diff changeset
25 ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1
e517c3f56091 Let test_ssl fail gracefully if ssl support is not available
Antoine Pitrou <solipsis@pitrou.net>
parents: 65247
diff changeset
26 ]
69998
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
27 if hasattr(ssl, 'PROTOCOL_SSLv2'):
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
28 PROTOCOLS.append(ssl.PROTOCOL_SSLv2)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
29
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
30 HOST = support.HOST
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
31
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
32 data_file = lambda name: os.path.join(os.path.dirname(__file__), name)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
33
65185
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
34 # The custom key and certificate files used in test_ssl are generated
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
35 # using Lib/test/make_ssl_certs.py.
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
36 # Other certificates are simply fetched from the Internet servers they
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
37 # are meant to authenticate.
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
38
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
39 CERTFILE = data_file("keycert.pem")
62276
3022904f9971 Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61782
diff changeset
40 BYTES_CERTFILE = os.fsencode(CERTFILE)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
41 ONLYCERT = data_file("ssl_cert.pem")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
42 ONLYKEY = data_file("ssl_key.pem")
62276
3022904f9971 Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61782
diff changeset
43 BYTES_ONLYCERT = os.fsencode(ONLYCERT)
3022904f9971 Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61782
diff changeset
44 BYTES_ONLYKEY = os.fsencode(ONLYKEY)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
45 CAPATH = data_file("capath")
62276
3022904f9971 Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61782
diff changeset
46 BYTES_CAPATH = os.fsencode(CAPATH)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
47
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
48 SVN_PYTHON_ORG_ROOT_CERT = data_file("https_svn_python_org_root.pem")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
49
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
50 EMPTYCERT = data_file("nullcert.pem")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
51 BADCERT = data_file("badcert.pem")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
52 WRONGCERT = data_file("XXXnonexisting.pem")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
53 BADKEY = data_file("badkey.pem")
72567
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
54 NOKIACERT = data_file("nokia.pem")
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
55
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
56
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
57 def handle_error(prefix):
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
58 exc_format = ' '.join(traceback.format_exception(*sys.exc_info()))
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
59 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
60 sys.stdout.write(prefix + exc_format)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
61
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
62 def can_clear_options():
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
63 # 0.9.8m or higher
71255
52ed0c6bb461 Issue #12440: When testing whether some bits in SSLContext.options can be
Antoine Pitrou <solipsis@pitrou.net>
parents: 70187
diff changeset
64 return ssl._OPENSSL_API_VERSION >= (0, 9, 8, 13, 15)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
65
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
66 def no_sslv2_implies_sslv3_hello():
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
67 # 0.9.7h or higher
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
68 return ssl.OPENSSL_VERSION_INFO >= (0, 9, 7, 8, 15)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
69
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
70
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
71 # Issue #9415: Ubuntu hijacks their OpenSSL and forcefully disables SSLv2
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
72 def skip_if_broken_ubuntu_ssl(func):
69998
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
73 if hasattr(ssl, 'PROTOCOL_SSLv2'):
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
74 @functools.wraps(func)
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
75 def f(*args, **kwargs):
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
76 try:
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
77 ssl.SSLContext(ssl.PROTOCOL_SSLv2)
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
78 except ssl.SSLError:
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
79 if (ssl.OPENSSL_VERSION_INFO == (0, 9, 8, 15, 15) and
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
80 platform.linux_distribution() == ('debian', 'squeeze/sid', '')):
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
81 raise unittest.SkipTest("Patched Ubuntu OpenSSL breaks behaviour")
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
82 return func(*args, **kwargs)
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
83 return f
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
84 else:
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
85 return func
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
86
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
87
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
88 class BasicSocketTests(unittest.TestCase):
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
89
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
90 def test_constants(self):
69997
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
91 #ssl.PROTOCOL_SSLv2
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
92 ssl.PROTOCOL_SSLv23
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
93 ssl.PROTOCOL_SSLv3
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
94 ssl.PROTOCOL_TLSv1
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
95 ssl.CERT_NONE
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
96 ssl.CERT_OPTIONAL
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
97 ssl.CERT_REQUIRED
65593
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
98 self.assertIn(ssl.HAS_SNI, {True, False})
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
99
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
100 def test_random(self):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
101 v = ssl.RAND_status()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
102 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
103 sys.stdout.write("\n RAND_status is %d (%s)\n"
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
104 % (v, (v and "sufficient randomness") or
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
105 "insufficient randomness"))
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
106 try:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
107 ssl.RAND_egd(1)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
108 except TypeError:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
109 pass
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
110 else:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
111 print("didn't raise TypeError")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
112 ssl.RAND_add("this is a random string", 75.0)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
113
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
114 def test_parse_cert(self):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
115 # note that this uses an 'unofficial' function in _ssl.c,
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
116 # provided solely for this test, to exercise the certificate
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
117 # parsing code
66114
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
118 p = ssl._ssl._test_decode_cert(CERTFILE)
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
119 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
120 sys.stdout.write("\n" + pprint.pformat(p) + "\n")
72567
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
121 self.assertEqual(p['issuer'],
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
122 ((('countryName', 'XY'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
123 (('localityName', 'Castle Anthrax'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
124 (('organizationName', 'Python Software Foundation'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
125 (('commonName', 'localhost'),))
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
126 )
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
127 self.assertEqual(p['notAfter'], 'Oct 5 23:01:56 2020 GMT')
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
128 self.assertEqual(p['notBefore'], 'Oct 8 23:01:56 2010 GMT')
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
129 self.assertEqual(p['serialNumber'], 'D7C7381919AFC24E')
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
130 self.assertEqual(p['subject'],
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
131 ((('countryName', 'XY'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
132 (('localityName', 'Castle Anthrax'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
133 (('organizationName', 'Python Software Foundation'),),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
134 (('commonName', 'localhost'),))
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
135 )
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
136 self.assertEqual(p['subjectAltName'], (('DNS', 'localhost'),))
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
137 # Issue #13034: the subjectAltName in some certificates
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
138 # (notably projects.developer.nokia.com:443) wasn't parsed
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
139 p = ssl._ssl._test_decode_cert(NOKIACERT)
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
140 if support.verbose:
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
141 sys.stdout.write("\n" + pprint.pformat(p) + "\n")
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
142 self.assertEqual(p['subjectAltName'],
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
143 (('DNS', 'projects.developer.nokia.com'),
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
144 ('DNS', 'projects.forum.nokia.com'))
65e7f40fefd4 Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents: 71255
diff changeset
145 )
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
146
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
147 def test_DER_to_PEM(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
148 with open(SVN_PYTHON_ORG_ROOT_CERT, 'r') as f:
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
149 pem = f.read()
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
150 d1 = ssl.PEM_cert_to_DER_cert(pem)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
151 p2 = ssl.DER_cert_to_PEM_cert(d1)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
152 d2 = ssl.PEM_cert_to_DER_cert(p2)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
153 self.assertEqual(d1, d2)
61035
827920c546af Merged revisions 80559 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61012
diff changeset
154 if not p2.startswith(ssl.PEM_HEADER + '\n'):
827920c546af Merged revisions 80559 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61012
diff changeset
155 self.fail("DER-to-PEM didn't include correct header:\n%r\n" % p2)
827920c546af Merged revisions 80559 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61012
diff changeset
156 if not p2.endswith('\n' + ssl.PEM_FOOTER + '\n'):
827920c546af Merged revisions 80559 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61012
diff changeset
157 self.fail("DER-to-PEM didn't include correct footer:\n%r\n" % p2)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
158
60373
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
159 def test_openssl_version(self):
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
160 n = ssl.OPENSSL_VERSION_NUMBER
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
161 t = ssl.OPENSSL_VERSION_INFO
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
162 s = ssl.OPENSSL_VERSION
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
163 self.assertIsInstance(n, int)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
164 self.assertIsInstance(t, tuple)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
165 self.assertIsInstance(s, str)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
166 # Some sanity checks follow
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
167 # >= 0.9
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
168 self.assertGreaterEqual(n, 0x900000)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
169 # < 2.0
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
170 self.assertLess(n, 0x20000000)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
171 major, minor, fix, patch, status = t
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
172 self.assertGreaterEqual(major, 0)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
173 self.assertLess(major, 2)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
174 self.assertGreaterEqual(minor, 0)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
175 self.assertLess(minor, 256)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
176 self.assertGreaterEqual(fix, 0)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
177 self.assertLess(fix, 256)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
178 self.assertGreaterEqual(patch, 0)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
179 self.assertLessEqual(patch, 26)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
180 self.assertGreaterEqual(status, 0)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
181 self.assertLessEqual(status, 15)
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
182 # Version string as returned by OpenSSL, the format might change
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
183 self.assertTrue(s.startswith("OpenSSL {:d}.{:d}.{:d}".format(major, minor, fix)),
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
184 (s, t))
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
185
60908
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
186 @support.cpython_only
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
187 def test_refcycle(self):
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
188 # Issue #7943: an SSL object doesn't create reference cycles with
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
189 # itself.
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
190 s = socket.socket(socket.AF_INET)
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
191 ss = ssl.wrap_socket(s)
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
192 wr = weakref.ref(ss)
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
193 del ss
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
194 self.assertEqual(wr(), None)
54e5ab29b30b Merged revisions 80426 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60873
diff changeset
195
64743
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
196 def test_wrapped_unconnected(self):
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
197 # Methods on an unconnected SSLSocket propagate the original
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
198 # socket.error raise by the underlying socket object.
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
199 s = socket.socket(socket.AF_INET)
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
200 ss = ssl.wrap_socket(s)
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
201 self.assertRaises(socket.error, ss.recv, 1)
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
202 self.assertRaises(socket.error, ss.recv_into, bytearray(b'x'))
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
203 self.assertRaises(socket.error, ss.recvfrom, 1)
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
204 self.assertRaises(socket.error, ss.recvfrom_into, bytearray(b'x'), 1)
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
205 self.assertRaises(socket.error, ss.send, b'x')
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
206 self.assertRaises(socket.error, ss.sendto, b'x', ('0.0.0.0', 0))
80d1c7734df2 Merged revisions 84807 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64586
diff changeset
207
60938
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
208 def test_timeout(self):
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
209 # Issue #8524: when creating an SSL socket, the timeout of the
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
210 # original socket should be retained.
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
211 for timeout in (None, 0.0, 5.0):
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
212 s = socket.socket(socket.AF_INET)
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
213 s.settimeout(timeout)
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
214 ss = ssl.wrap_socket(s)
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
215 self.assertEqual(timeout, ss.gettimeout())
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
216
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
217 def test_errors(self):
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
218 sock = socket.socket()
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
219 self.assertRaisesRegex(ValueError,
64324
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
220 "certfile must be specified",
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
221 ssl.wrap_socket, sock, keyfile=CERTFILE)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
222 self.assertRaisesRegex(ValueError,
64324
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
223 "certfile must be specified for server-side operations",
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
224 ssl.wrap_socket, sock, server_side=True)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
225 self.assertRaisesRegex(ValueError,
64324
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
226 "certfile must be specified for server-side operations",
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
227 ssl.wrap_socket, sock, server_side=True, certfile="")
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
228 s = ssl.wrap_socket(sock, server_side=True, certfile=CERTFILE)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
229 self.assertRaisesRegex(ValueError, "can't connect in server-side mode",
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
230 s.connect, (HOST, 8080))
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
231 with self.assertRaises(IOError) as cm:
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
232 with socket.socket() as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
233 ssl.wrap_socket(sock, certfile=WRONGCERT)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
234 self.assertEqual(cm.exception.errno, errno.ENOENT)
64324
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
235 with self.assertRaises(IOError) as cm:
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
236 with socket.socket() as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
237 ssl.wrap_socket(sock, certfile=CERTFILE, keyfile=WRONGCERT)
64324
84883607e21a Fix issue #9711: raise ValueError is SSLConnection constructor is invoked with keyfile and not certfile.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64309
diff changeset
238 self.assertEqual(cm.exception.errno, errno.ENOENT)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
239 with self.assertRaises(IOError) as cm:
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
240 with socket.socket() as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
241 ssl.wrap_socket(sock, certfile=WRONGCERT, keyfile=WRONGCERT)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
242 self.assertEqual(cm.exception.errno, errno.ENOENT)
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
243
65179
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
244 def test_match_hostname(self):
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
245 def ok(cert, hostname):
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
246 ssl.match_hostname(cert, hostname)
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
247 def fail(cert, hostname):
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
248 self.assertRaises(ssl.CertificateError,
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
249 ssl.match_hostname, cert, hostname)
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
250
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
251 cert = {'subject': ((('commonName', 'example.com'),),)}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
252 ok(cert, 'example.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
253 ok(cert, 'ExAmple.cOm')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
254 fail(cert, 'www.example.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
255 fail(cert, '.example.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
256 fail(cert, 'example.org')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
257 fail(cert, 'exampleXcom')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
258
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
259 cert = {'subject': ((('commonName', '*.a.com'),),)}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
260 ok(cert, 'foo.a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
261 fail(cert, 'bar.foo.a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
262 fail(cert, 'a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
263 fail(cert, 'Xa.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
264 fail(cert, '.a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
265
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
266 cert = {'subject': ((('commonName', 'a.*.com'),),)}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
267 ok(cert, 'a.foo.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
268 fail(cert, 'a..com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
269 fail(cert, 'a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
270
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
271 cert = {'subject': ((('commonName', 'f*.com'),),)}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
272 ok(cert, 'foo.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
273 ok(cert, 'f.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
274 fail(cert, 'bar.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
275 fail(cert, 'foo.a.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
276 fail(cert, 'bar.foo.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
277
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
278 # Slightly fake real-world example
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
279 cert = {'notAfter': 'Jun 26 21:41:46 2011 GMT',
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
280 'subject': ((('commonName', 'linuxfrz.org'),),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
281 'subjectAltName': (('DNS', 'linuxfr.org'),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
282 ('DNS', 'linuxfr.com'),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
283 ('othername', '<unsupported>'))}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
284 ok(cert, 'linuxfr.org')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
285 ok(cert, 'linuxfr.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
286 # Not a "DNS" entry
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
287 fail(cert, '<unsupported>')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
288 # When there is a subjectAltName, commonName isn't used
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
289 fail(cert, 'linuxfrz.org')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
290
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
291 # A pristine real-world example
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
292 cert = {'notAfter': 'Dec 18 23:59:59 2011 GMT',
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
293 'subject': ((('countryName', 'US'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
294 (('stateOrProvinceName', 'California'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
295 (('localityName', 'Mountain View'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
296 (('organizationName', 'Google Inc'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
297 (('commonName', 'mail.google.com'),))}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
298 ok(cert, 'mail.google.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
299 fail(cert, 'gmail.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
300 # Only commonName is considered
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
301 fail(cert, 'California')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
302
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
303 # Neither commonName nor subjectAltName
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
304 cert = {'notAfter': 'Dec 18 23:59:59 2011 GMT',
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
305 'subject': ((('countryName', 'US'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
306 (('stateOrProvinceName', 'California'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
307 (('localityName', 'Mountain View'),),
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
308 (('organizationName', 'Google Inc'),))}
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
309 fail(cert, 'mail.google.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
310
69874
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
311 # No DNS entry in subjectAltName but a commonName
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
312 cert = {'notAfter': 'Dec 18 23:59:59 2099 GMT',
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
313 'subject': ((('countryName', 'US'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
314 (('stateOrProvinceName', 'California'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
315 (('localityName', 'Mountain View'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
316 (('commonName', 'mail.google.com'),)),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
317 'subjectAltName': (('othername', 'blabla'), )}
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
318 ok(cert, 'mail.google.com')
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
319
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
320 # No DNS entry subjectAltName and no commonName
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
321 cert = {'notAfter': 'Dec 18 23:59:59 2099 GMT',
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
322 'subject': ((('countryName', 'US'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
323 (('stateOrProvinceName', 'California'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
324 (('localityName', 'Mountain View'),),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
325 (('organizationName', 'Google Inc'),)),
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
326 'subjectAltName': (('othername', 'blabla'),)}
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
327 fail(cert, 'google.com')
d4c2a99d1bad Issue #12000: When a SSL certificate has a subjectAltName without any
Antoine Pitrou <solipsis@pitrou.net>
parents: 68257
diff changeset
328
65179
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
329 # Empty cert / no cert
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
330 self.assertRaises(ValueError, ssl.match_hostname, None, 'example.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
331 self.assertRaises(ValueError, ssl.match_hostname, {}, 'example.com')
4c98eeff37e7 Issue #1589: Add ssl.match_hostname(), to help implement server identity
Antoine Pitrou <solipsis@pitrou.net>
parents: 65088
diff changeset
332
65593
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
333 def test_server_side(self):
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
334 # server_hostname doesn't work for server sockets
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
335 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
336 with socket.socket() as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
337 self.assertRaises(ValueError, ctx.wrap_socket, sock, True,
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
338 server_hostname="some.hostname")
60373
9e5e9d8fa847 Merged revisions 79812 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 59615
diff changeset
339
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
340 class ContextTests(unittest.TestCase):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
341
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
342 @skip_if_broken_ubuntu_ssl
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
343 def test_constructor(self):
69998
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
344 if hasattr(ssl, 'PROTOCOL_SSLv2'):
20beec22764f (Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69874 69997
diff changeset
345 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv2)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
346 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
347 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
348 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
349 self.assertRaises(TypeError, ssl.SSLContext)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
350 self.assertRaises(ValueError, ssl.SSLContext, -1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
351 self.assertRaises(ValueError, ssl.SSLContext, 42)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
352
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
353 @skip_if_broken_ubuntu_ssl
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
354 def test_protocol(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
355 for proto in PROTOCOLS:
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
356 ctx = ssl.SSLContext(proto)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
357 self.assertEqual(ctx.protocol, proto)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
358
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
359 def test_ciphers(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
360 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
361 ctx.set_ciphers("ALL")
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
362 ctx.set_ciphers("DEFAULT")
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
363 with self.assertRaisesRegex(ssl.SSLError, "No cipher can be selected"):
61648
4d27e880724a "xyzzy" is not a silly enough name for some OpenSSL versions to report an error
Antoine Pitrou <solipsis@pitrou.net>
parents: 61638
diff changeset
364 ctx.set_ciphers("^$:,;?*'dorothyx")
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
365
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
366 @skip_if_broken_ubuntu_ssl
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
367 def test_options(self):
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
368 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
369 # OP_ALL is the default value
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
370 self.assertEqual(ssl.OP_ALL, ctx.options)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
371 ctx.options |= ssl.OP_NO_SSLv2
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
372 self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
373 ctx.options)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
374 ctx.options |= ssl.OP_NO_SSLv3
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
375 self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
376 ctx.options)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
377 if can_clear_options():
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
378 ctx.options = (ctx.options & ~ssl.OP_NO_SSLv2) | ssl.OP_NO_TLSv1
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
379 self.assertEqual(ssl.OP_ALL | ssl.OP_NO_TLSv1 | ssl.OP_NO_SSLv3,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
380 ctx.options)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
381 ctx.options = 0
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
382 self.assertEqual(0, ctx.options)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
383 else:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
384 with self.assertRaises(ValueError):
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
385 ctx.options = 0
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
386
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
387 def test_verify(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
388 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
389 # Default value
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
390 self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
391 ctx.verify_mode = ssl.CERT_OPTIONAL
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
392 self.assertEqual(ctx.verify_mode, ssl.CERT_OPTIONAL)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
393 ctx.verify_mode = ssl.CERT_REQUIRED
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
394 self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
395 ctx.verify_mode = ssl.CERT_NONE
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
396 self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
397 with self.assertRaises(TypeError):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
398 ctx.verify_mode = None
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
399 with self.assertRaises(ValueError):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
400 ctx.verify_mode = 42
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
401
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
402 def test_load_cert_chain(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
403 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
404 # Combined key and cert in a single file
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
405 ctx.load_cert_chain(CERTFILE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
406 ctx.load_cert_chain(CERTFILE, keyfile=CERTFILE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
407 self.assertRaises(TypeError, ctx.load_cert_chain, keyfile=CERTFILE)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
408 with self.assertRaises(IOError) as cm:
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
409 ctx.load_cert_chain(WRONGCERT)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
410 self.assertEqual(cm.exception.errno, errno.ENOENT)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
411 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
412 ctx.load_cert_chain(BADCERT)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
413 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
414 ctx.load_cert_chain(EMPTYCERT)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
415 # Separate key and cert
61659
c86eeb733316 Try to fix buildbot failures with old OpenSSLs.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61648
diff changeset
416 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
417 ctx.load_cert_chain(ONLYCERT, ONLYKEY)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
418 ctx.load_cert_chain(certfile=ONLYCERT, keyfile=ONLYKEY)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
419 ctx.load_cert_chain(certfile=BYTES_ONLYCERT, keyfile=BYTES_ONLYKEY)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
420 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
421 ctx.load_cert_chain(ONLYCERT)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
422 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
423 ctx.load_cert_chain(ONLYKEY)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
424 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
425 ctx.load_cert_chain(certfile=ONLYKEY, keyfile=ONLYCERT)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
426 # Mismatching key and cert
61659
c86eeb733316 Try to fix buildbot failures with old OpenSSLs.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61648
diff changeset
427 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
428 with self.assertRaisesRegex(ssl.SSLError, "key values mismatch"):
65185
9c026183d82a Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the
Antoine Pitrou <solipsis@pitrou.net>
parents: 65179
diff changeset
429 ctx.load_cert_chain(SVN_PYTHON_ORG_ROOT_CERT, ONLYKEY)
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
430
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
431 def test_load_verify_locations(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
432 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
433 ctx.load_verify_locations(CERTFILE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
434 ctx.load_verify_locations(cafile=CERTFILE, capath=None)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
435 ctx.load_verify_locations(BYTES_CERTFILE)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
436 ctx.load_verify_locations(cafile=BYTES_CERTFILE, capath=None)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
437 self.assertRaises(TypeError, ctx.load_verify_locations)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
438 self.assertRaises(TypeError, ctx.load_verify_locations, None, None)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
439 with self.assertRaises(IOError) as cm:
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
440 ctx.load_verify_locations(WRONGCERT)
64309
9c51f3836563 dedent some lines in test_ssl so that they are actually executed
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64308
diff changeset
441 self.assertEqual(cm.exception.errno, errno.ENOENT)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
442 with self.assertRaisesRegex(ssl.SSLError, "PEM lib"):
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
443 ctx.load_verify_locations(BADCERT)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
444 ctx.load_verify_locations(CERTFILE, CAPATH)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
445 ctx.load_verify_locations(CERTFILE, capath=BYTES_CAPATH)
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
446
67792
852186e5ae2a Issue #10989: Fix a crash on SSLContext.load_verify_locations(None, True).
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67464
diff changeset
447 # Issue #10989: crash if the second argument type is invalid
852186e5ae2a Issue #10989: Fix a crash on SSLContext.load_verify_locations(None, True).
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67464
diff changeset
448 self.assertRaises(TypeError, ctx.load_verify_locations, None, True)
852186e5ae2a Issue #10989: Fix a crash on SSLContext.load_verify_locations(None, True).
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67464
diff changeset
449
65594
1438d6b67052 Fix test_ssl on Ubuntu buildbot with patched OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 65593
diff changeset
450 @skip_if_broken_ubuntu_ssl
65223
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
451 def test_session_stats(self):
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
452 for proto in PROTOCOLS:
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
453 ctx = ssl.SSLContext(proto)
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
454 self.assertEqual(ctx.session_stats(), {
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
455 'number': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
456 'connect': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
457 'connect_good': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
458 'connect_renegotiate': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
459 'accept': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
460 'accept_good': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
461 'accept_renegotiate': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
462 'hits': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
463 'misses': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
464 'timeouts': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
465 'cache_full': 0,
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
466 })
9c723afa44da Issue #10075: Add a session_stats() method to SSLContext objects.
Antoine Pitrou <solipsis@pitrou.net>
parents: 65185
diff changeset
467
66217
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
468 def test_set_default_verify_paths(self):
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
469 # There's not much we can do to test that it acts as expected,
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
470 # so just check it doesn't crash or raise an exception.
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
471 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
472 ctx.set_default_verify_paths()
7826d907b765 Issue #10443: Add the SSLContext.set_default_verify_paths() method.
Antoine Pitrou <solipsis@pitrou.net>
parents: 66114
diff changeset
473
60911
95c5e094b380 Merged revisions 80429 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60908
diff changeset
474
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
475 class NetworkedTests(unittest.TestCase):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
476
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
477 def test_connect(self):
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
478 with support.transient_internet("svn.python.org"):
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
479 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
480 cert_reqs=ssl.CERT_NONE)
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
481 try:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
482 s.connect(("svn.python.org", 443))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
483 self.assertEqual({}, s.getpeercert())
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
484 finally:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
485 s.close()
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
486
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
487 # this should fail because we have no verification certs
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
488 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
489 cert_reqs=ssl.CERT_REQUIRED)
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
490 self.assertRaisesRegex(ssl.SSLError, "certificate verify failed",
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
491 s.connect, ("svn.python.org", 443))
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
492 s.close()
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
493
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
494 # this should succeed because we specify the root cert
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
495 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
496 cert_reqs=ssl.CERT_REQUIRED,
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
497 ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
498 try:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
499 s.connect(("svn.python.org", 443))
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
500 self.assertTrue(s.getpeercert())
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
501 finally:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
502 s.close()
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
503
68186
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
504 def test_connect_ex(self):
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
505 # Issue #11326: check connect_ex() implementation
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
506 with support.transient_internet("svn.python.org"):
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
507 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
508 cert_reqs=ssl.CERT_REQUIRED,
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
509 ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
510 try:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
511 self.assertEqual(0, s.connect_ex(("svn.python.org", 443)))
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
512 self.assertTrue(s.getpeercert())
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
513 finally:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
514 s.close()
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
515
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
516 def test_non_blocking_connect_ex(self):
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
517 # Issue #11326: non-blocking connect_ex() should allow handshake
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
518 # to proceed after the socket gets ready.
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
519 with support.transient_internet("svn.python.org"):
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
520 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
521 cert_reqs=ssl.CERT_REQUIRED,
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
522 ca_certs=SVN_PYTHON_ORG_ROOT_CERT,
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
523 do_handshake_on_connect=False)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
524 try:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
525 s.setblocking(False)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
526 rc = s.connect_ex(('svn.python.org', 443))
68188
2f07d375ce6e Follow up to r88664: non-blocking connect-ex() can return EWOULDBLOCK under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents: 68186
diff changeset
527 # EWOULDBLOCK under Windows, EINPROGRESS elsewhere
2f07d375ce6e Follow up to r88664: non-blocking connect-ex() can return EWOULDBLOCK under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents: 68186
diff changeset
528 self.assertIn(rc, (0, errno.EINPROGRESS, errno.EWOULDBLOCK))
68186
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
529 # Wait for connect to finish
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
530 select.select([], [s], [], 5.0)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
531 # Non-blocking handshake
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
532 while True:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
533 try:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
534 s.do_handshake()
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
535 break
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
536 except ssl.SSLError as err:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
537 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
538 select.select([s], [], [], 5.0)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
539 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
540 select.select([], [s], [], 5.0)
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
541 else:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
542 raise
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
543 # SSL established
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
544 self.assertTrue(s.getpeercert())
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
545 finally:
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
546 s.close()
1909c12ef06c Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
Antoine Pitrou <solipsis@pitrou.net>
parents: 67792
diff changeset
547
70187
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
548 def test_timeout_connect_ex(self):
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
549 # Issue #12065: on a timeout, connect_ex() should return the original
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
550 # errno (mimicking the behaviour of non-SSL sockets).
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
551 with support.transient_internet("svn.python.org"):
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
552 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
553 cert_reqs=ssl.CERT_REQUIRED,
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
554 ca_certs=SVN_PYTHON_ORG_ROOT_CERT,
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
555 do_handshake_on_connect=False)
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
556 try:
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
557 s.settimeout(0.0000001)
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
558 rc = s.connect_ex(('svn.python.org', 443))
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
559 if rc == 0:
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
560 self.skipTest("svn.python.org responded too quickly")
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
561 self.assertIn(rc, (errno.EAGAIN, errno.EWOULDBLOCK))
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
562 finally:
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
563 s.close()
019d8ccdf03b Issue #12065: connect_ex() on an SSL socket now returns the original errno
Antoine Pitrou <solipsis@pitrou.net>
parents: 69998
diff changeset
564
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
565 def test_connect_with_context(self):
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
566 with support.transient_internet("svn.python.org"):
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
567 # Same as test_connect, but with a separately created context
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
568 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
569 s = ctx.wrap_socket(socket.socket(socket.AF_INET))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
570 s.connect(("svn.python.org", 443))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
571 try:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
572 self.assertEqual({}, s.getpeercert())
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
573 finally:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
574 s.close()
65593
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
575 # Same with a server hostname
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
576 s = ctx.wrap_socket(socket.socket(socket.AF_INET),
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
577 server_hostname="svn.python.org")
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
578 if ssl.HAS_SNI:
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
579 s.connect(("svn.python.org", 443))
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
580 s.close()
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
581 else:
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
582 self.assertRaises(ValueError, s.connect, ("svn.python.org", 443))
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
583 # This should fail because we have no verification certs
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
584 ctx.verify_mode = ssl.CERT_REQUIRED
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
585 s = ctx.wrap_socket(socket.socket(socket.AF_INET))
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
586 self.assertRaisesRegex(ssl.SSLError, "certificate verify failed",
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
587 s.connect, ("svn.python.org", 443))
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
588 s.close()
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
589 # This should succeed because we specify the root cert
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
590 ctx.load_verify_locations(SVN_PYTHON_ORG_ROOT_CERT)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
591 s = ctx.wrap_socket(socket.socket(socket.AF_INET))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
592 s.connect(("svn.python.org", 443))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
593 try:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
594 cert = s.getpeercert()
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
595 self.assertTrue(cert)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
596 finally:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
597 s.close()
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
598
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
599 def test_connect_capath(self):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
600 # Verify server certificates using the `capath` argument
61636
b29ab4e76736 Followup on r81233: fix test_ssl with OpenSSL < 1.0.0.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61635
diff changeset
601 # NOTE: the subject hashing algorithm has been changed between
b29ab4e76736 Followup on r81233: fix test_ssl with OpenSSL < 1.0.0.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61635
diff changeset
602 # OpenSSL 0.9.8n and 1.0.0, as a result the capath directory must
b29ab4e76736 Followup on r81233: fix test_ssl with OpenSSL < 1.0.0.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61635
diff changeset
603 # contain both versions of each certificate (same content, different
61668
39eb91a5f9dc Typo (thanks Arfrever)
Antoine Pitrou <solipsis@pitrou.net>
parents: 61659
diff changeset
604 # filename) for this test to be portable across OpenSSL releases.
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
605 with support.transient_internet("svn.python.org"):
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
606 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
607 ctx.verify_mode = ssl.CERT_REQUIRED
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
608 ctx.load_verify_locations(capath=CAPATH)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
609 s = ctx.wrap_socket(socket.socket(socket.AF_INET))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
610 s.connect(("svn.python.org", 443))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
611 try:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
612 cert = s.getpeercert()
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
613 self.assertTrue(cert)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
614 finally:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
615 s.close()
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
616 # Same with a bytes `capath` argument
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
617 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
618 ctx.verify_mode = ssl.CERT_REQUIRED
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
619 ctx.load_verify_locations(capath=BYTES_CAPATH)
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
620 s = ctx.wrap_socket(socket.socket(socket.AF_INET))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
621 s.connect(("svn.python.org", 443))
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
622 try:
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
623 cert = s.getpeercert()
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
624 self.assertTrue(cert)
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
625 finally:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
626 s.close()
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
627
60918
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
628 @unittest.skipIf(os.name == "nt", "Can't use a socket as a file under Windows")
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
629 def test_makefile_close(self):
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
630 # Issue #5238: creating a file-like object with makefile() shouldn't
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
631 # delay closing the underlying "real socket" (here tested with its
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
632 # file descriptor, hence skipping the test under Windows).
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
633 with support.transient_internet("svn.python.org"):
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
634 ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
635 ss.connect(("svn.python.org", 443))
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
636 fd = ss.fileno()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
637 f = ss.makefile()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
638 f.close()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
639 # The fd is still open
60918
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
640 os.read(fd, 0)
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
641 # Closing the SSL socket should close the fd too
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
642 ss.close()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
643 gc.collect()
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
644 with self.assertRaises(OSError) as e:
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
645 os.read(fd, 0)
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
646 self.assertEqual(e.exception.errno, errno.EBADF)
60918
d81eff118d81 Merged revisions 80436 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60911
diff changeset
647
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
648 def test_non_blocking_handshake(self):
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
649 with support.transient_internet("svn.python.org"):
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
650 s = socket.socket(socket.AF_INET)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
651 s.connect(("svn.python.org", 443))
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
652 s.setblocking(False)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
653 s = ssl.wrap_socket(s,
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
654 cert_reqs=ssl.CERT_NONE,
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
655 do_handshake_on_connect=False)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
656 count = 0
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
657 while True:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
658 try:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
659 count += 1
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
660 s.do_handshake()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
661 break
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
662 except ssl.SSLError as err:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
663 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
664 select.select([s], [], [])
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
665 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
666 select.select([], [s], [])
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
667 else:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
668 raise
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
669 s.close()
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
670 if support.verbose:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
671 sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
672
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
673 def test_get_server_certificate(self):
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
674 with support.transient_internet("svn.python.org"):
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
675 pem = ssl.get_server_certificate(("svn.python.org", 443))
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
676 if not pem:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
677 self.fail("No server certificate on svn.python.org:443!")
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
678
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
679 try:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
680 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=CERTFILE)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
681 except ssl.SSLError as x:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
682 #should fail
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
683 if support.verbose:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
684 sys.stdout.write("%s\n" % x)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
685 else:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
686 self.fail("Got server certificate %s for svn.python.org!" % pem)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
687
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
688 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
689 if not pem:
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
690 self.fail("No server certificate on svn.python.org:443!")
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
691 if support.verbose:
64586
a51f467f5e1e Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 64536
diff changeset
692 sys.stdout.write("\nVerified certificate for svn.python.org:443 is\n%s\n" % pem)
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
693
64054
134276eed280 Put test_ciphers in NetworkedTests
Antoine Pitrou <solipsis@pitrou.net>
parents: 64053
diff changeset
694 def test_ciphers(self):
134276eed280 Put test_ciphers in NetworkedTests
Antoine Pitrou <solipsis@pitrou.net>
parents: 64053
diff changeset
695 remote = ("svn.python.org", 443)
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
696 with support.transient_internet(remote[0]):
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
697 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
698 cert_reqs=ssl.CERT_NONE, ciphers="ALL")
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
699 s.connect(remote)
64054
134276eed280 Put test_ciphers in NetworkedTests
Antoine Pitrou <solipsis@pitrou.net>
parents: 64053
diff changeset
700 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
701 cert_reqs=ssl.CERT_NONE, ciphers="DEFAULT")
64054
134276eed280 Put test_ciphers in NetworkedTests
Antoine Pitrou <solipsis@pitrou.net>
parents: 64053
diff changeset
702 s.connect(remote)
64585
38ca63518085 Use transient_internet() where appropriate in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents: 64533
diff changeset
703 # Error checking can happen at instantiation or when connecting
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
704 with self.assertRaisesRegex(ssl.SSLError, "No cipher can be selected"):
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
705 with socket.socket(socket.AF_INET) as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
706 s = ssl.wrap_socket(sock,
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
707 cert_reqs=ssl.CERT_NONE, ciphers="^$:,;?*'dorothyx")
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
708 s.connect(remote)
64054
134276eed280 Put test_ciphers in NetworkedTests
Antoine Pitrou <solipsis@pitrou.net>
parents: 64053
diff changeset
709
60818
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
710 def test_algorithms(self):
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
711 # Issue #8484: all algorithms should be available when verifying a
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
712 # certificate.
60872
4b7f3ae22c8f Merged revisions 80379 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60818
diff changeset
713 # SHA256 was added in OpenSSL 0.9.8
4b7f3ae22c8f Merged revisions 80379 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60818
diff changeset
714 if ssl.OPENSSL_VERSION_INFO < (0, 9, 8, 0, 15):
4b7f3ae22c8f Merged revisions 80379 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60818
diff changeset
715 self.skipTest("SHA256 not available on %r" % ssl.OPENSSL_VERSION)
76749
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
716 # sha256.tbs-internet.com needs SNI to use the correct certificate
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
717 if not ssl.HAS_SNI:
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
718 self.skipTest("SNI needed for this test")
67456
15967b7f058f test_ssl: test SHA256 using sha256.tbs-internet.com instead of sha2.hboeck.de
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66663
diff changeset
719 # https://sha2.hboeck.de/ was used until 2011-01-08 (no route to host)
15967b7f058f test_ssl: test SHA256 using sha256.tbs-internet.com instead of sha2.hboeck.de
Victor Stinner <victor.stinner@haypocalc.com>
parents: 66663
diff changeset
720 remote = ("sha256.tbs-internet.com", 443)
60818
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
721 sha256_cert = os.path.join(os.path.dirname(__file__), "sha256.pem")
67467
abe201dfd3dc Merged revisions 87861,87863 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 66475
diff changeset
722 with support.transient_internet("sha256.tbs-internet.com"):
76749
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
723 ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
724 ctx.verify_mode = ssl.CERT_REQUIRED
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
725 ctx.load_verify_locations(sha256_cert)
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
726 s = ctx.wrap_socket(socket.socket(socket.AF_INET),
683295cf9489 Fix test connecting to sha256.tbs-internet.com.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74668
diff changeset
727 server_hostname="sha256.tbs-internet.com")
60818
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
728 try:
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
729 s.connect(remote)
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
730 if support.verbose:
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
731 sys.stdout.write("\nCipher with %r is %r\n" %
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
732 (remote, s.cipher()))
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
733 sys.stdout.write("Certificate is:\n%s\n" %
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
734 pprint.pformat(s.getpeercert()))
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
735 finally:
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
736 s.close()
a0b8af1be560 Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
737
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
738
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
739 try:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
740 import threading
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
741 except ImportError:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
742 _have_threads = False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
743 else:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
744 _have_threads = True
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
745
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
746 from test.ssl_servers import make_https_server
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
747
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
748 class ThreadedEchoServer(threading.Thread):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
749
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
750 class ConnectionHandler(threading.Thread):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
751
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
752 """A mildly complicated class, because we want it to work both
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
753 with and without the SSL wrapper around the socket connection, so
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
754 that we can test the STARTTLS functionality."""
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
755
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
756 def __init__(self, server, connsock, addr):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
757 self.server = server
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
758 self.running = False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
759 self.sock = connsock
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
760 self.addr = addr
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
761 self.sock.setblocking(1)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
762 self.sslconn = None
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
763 threading.Thread.__init__(self)
48754
2bac0d421929 Merged revisions 65829 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48681
diff changeset
764 self.daemon = True
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
765
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
766 def wrap_conn(self):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
767 try:
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
768 self.sslconn = self.server.context.wrap_socket(
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
769 self.sock, server_side=True)
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
770 except ssl.SSLError as e:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
771 # XXX Various errors can have happened here, for example
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
772 # a mismatching protocol version, an invalid certificate,
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
773 # or a low-level bug. This should be made more discriminating.
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
774 self.server.conn_errors.append(e)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
775 if self.server.chatty:
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
776 handle_error("\n server: bad connection attempt from " + repr(self.addr) + ":\n")
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
777 self.running = False
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
778 self.server.stop()
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
779 self.close()
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
780 return False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
781 else:
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
782 if self.server.context.verify_mode == ssl.CERT_REQUIRED:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
783 cert = self.sslconn.getpeercert()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
784 if support.verbose and self.server.chatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
785 sys.stdout.write(" client cert is " + pprint.pformat(cert) + "\n")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
786 cert_binary = self.sslconn.getpeercert(True)
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
787 if support.verbose and self.server.chatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
788 sys.stdout.write(" cert binary is " + str(len(cert_binary)) + " bytes\n")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
789 cipher = self.sslconn.cipher()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
790 if support.verbose and self.server.chatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
791 sys.stdout.write(" server: connection cipher is now " + str(cipher) + "\n")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
792 return True
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
793
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
794 def read(self):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
795 if self.sslconn:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
796 return self.sslconn.read()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
797 else:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
798 return self.sock.recv(1024)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
799
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
800 def write(self, bytes):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
801 if self.sslconn:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
802 return self.sslconn.write(bytes)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
803 else:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
804 return self.sock.send(bytes)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
805
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
806 def close(self):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
807 if self.sslconn:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
808 self.sslconn.close()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
809 else:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
810 self.sock.close()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
811
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
812 def run(self):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
813 self.running = True
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
814 if not self.server.starttls_server:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
815 if not self.wrap_conn():
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
816 return
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
817 while self.running:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
818 try:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
819 msg = self.read()
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
820 stripped = msg.strip()
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
821 if not stripped:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
822 # eof, so quit this handler
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
823 self.running = False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
824 self.close()
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
825 elif stripped == b'over':
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
826 if support.verbose and self.server.connectionchatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
827 sys.stdout.write(" server: client closed connection\n")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
828 self.close()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
829 return
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
830 elif (self.server.starttls_server and
61077
007319a9c888 Merged revisions 80603 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61072
diff changeset
831 stripped == b'STARTTLS'):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
832 if support.verbose and self.server.connectionchatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
833 sys.stdout.write(" server: read STARTTLS from client, sending OK...\n")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
834 self.write(b"OK\n")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
835 if not self.wrap_conn():
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
836 return
48681
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
837 elif (self.server.starttls_server and self.sslconn
61077
007319a9c888 Merged revisions 80603 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61072
diff changeset
838 and stripped == b'ENDTLS'):
48681
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
839 if support.verbose and self.server.connectionchatty:
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
840 sys.stdout.write(" server: read ENDTLS from client, sending OK...\n")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
841 self.write(b"OK\n")
48681
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
842 self.sock = self.sslconn.unwrap()
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
843 self.sslconn = None
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
844 if support.verbose and self.server.connectionchatty:
3c8ef3466923 clean up ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48521
diff changeset
845 sys.stdout.write(" server: connection is now unencrypted...\n")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
846 else:
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
847 if (support.verbose and
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
848 self.server.connectionchatty):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
849 ctype = (self.sslconn and "encrypted") or "unencrypted"
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
850 sys.stdout.write(" server: read %r (%s), sending back %r (%s)...\n"
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
851 % (msg, ctype, msg.lower(), ctype))
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
852 self.write(msg.lower())
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
853 except socket.error:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
854 if self.server.chatty:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
855 handle_error("Test server failure:\n")
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
856 self.close()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
857 self.running = False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
858 # normally, we'd just stop here, but for the test
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
859 # harness, we want to stop the server
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
860 self.server.stop()
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
861
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
862 def __init__(self, certificate=None, ssl_version=None,
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
863 certreqs=None, cacerts=None,
60662
e5f6de18b715 Merged revisions 80151 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60373
diff changeset
864 chatty=True, connectionchatty=False, starttls_server=False,
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
865 ciphers=None, context=None):
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
866 if context:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
867 self.context = context
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
868 else:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
869 self.context = ssl.SSLContext(ssl_version
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
870 if ssl_version is not None
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
871 else ssl.PROTOCOL_TLSv1)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
872 self.context.verify_mode = (certreqs if certreqs is not None
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
873 else ssl.CERT_NONE)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
874 if cacerts:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
875 self.context.load_verify_locations(cacerts)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
876 if certificate:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
877 self.context.load_cert_chain(certificate)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
878 if ciphers:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
879 self.context.set_ciphers(ciphers)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
880 self.chatty = chatty
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
881 self.connectionchatty = connectionchatty
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
882 self.starttls_server = starttls_server
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
883 self.sock = socket.socket()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
884 self.port = support.bind_port(self.sock)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
885 self.flag = None
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
886 self.active = False
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
887 self.conn_errors = []
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
888 threading.Thread.__init__(self)
48754
2bac0d421929 Merged revisions 65829 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48681
diff changeset
889 self.daemon = True
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
890
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
891 def __enter__(self):
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
892 self.start(threading.Event())
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
893 self.flag.wait()
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
894 return self
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
895
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
896 def __exit__(self, *args):
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
897 self.stop()
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
898 self.join()
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
899
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
900 def start(self, flag=None):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
901 self.flag = flag
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
902 threading.Thread.start(self)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
903
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
904 def run(self):
61005
1e1b2351cf12 Merged revisions 80528 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61000
diff changeset
905 self.sock.settimeout(0.05)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
906 self.sock.listen(5)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
907 self.active = True
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
908 if self.flag:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
909 # signal an event
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
910 self.flag.set()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
911 while self.active:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
912 try:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
913 newconn, connaddr = self.sock.accept()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
914 if support.verbose and self.chatty:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
915 sys.stdout.write(' server: new connection from '
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
916 + repr(connaddr) + '\n')
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
917 handler = self.ConnectionHandler(self, newconn, connaddr)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
918 handler.start()
74659
76d60fcef3db Fix intermittent test_ssl failure.
Antoine Pitrou <solipsis@pitrou.net>
parents: 74248
diff changeset
919 handler.join()
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
920 except socket.timeout:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
921 pass
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
922 except KeyboardInterrupt:
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
923 self.stop()
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
924 self.sock.close()
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
925
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
926 def stop(self):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
927 self.active = False
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
928
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
929 class AsyncoreEchoServer(threading.Thread):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
930
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
931 # this one's based on asyncore.dispatcher
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
932
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
933 class EchoServer (asyncore.dispatcher):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
934
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
935 class ConnectionHandler (asyncore.dispatcher_with_send):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
936
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
937 def __init__(self, conn, certfile):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
938 self.socket = ssl.wrap_socket(conn, server_side=True,
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
939 certfile=certfile,
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
940 do_handshake_on_connect=False)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
941 asyncore.dispatcher_with_send.__init__(self, self.socket)
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
942 self._ssl_accepting = True
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
943 self._do_ssl_handshake()
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
944
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
945 def readable(self):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
946 if isinstance(self.socket, ssl.SSLSocket):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
947 while self.socket.pending() > 0:
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
948 self.handle_read_event()
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
949 return True
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
950
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
951 def _do_ssl_handshake(self):
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
952 try:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
953 self.socket.do_handshake()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
954 except ssl.SSLError as err:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
955 if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
956 ssl.SSL_ERROR_WANT_WRITE):
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
957 return
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
958 elif err.args[0] == ssl.SSL_ERROR_EOF:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
959 return self.handle_close()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
960 raise
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
961 except socket.error as err:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
962 if err.args[0] == errno.ECONNABORTED:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
963 return self.handle_close()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
964 else:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
965 self._ssl_accepting = False
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
966
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
967 def handle_read(self):
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
968 if self._ssl_accepting:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
969 self._do_ssl_handshake()
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
970 else:
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
971 data = self.recv(1024)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
972 if support.verbose:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
973 sys.stdout.write(" server: read %s from client\n" % repr(data))
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
974 if not data:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
975 self.close()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
976 else:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
977 self.send(data.lower())
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
978
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
979 def handle_close(self):
48384
4d2d0a21d494 close asyncore.dispatcher on EOF
Bill Janssen <janssen@parc.com>
parents: 48334
diff changeset
980 self.close()
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
981 if support.verbose:
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
982 sys.stdout.write(" server: closed connection %s\n" % self.socket)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
983
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
984 def handle_error(self):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
985 raise
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
986
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
987 def __init__(self, certfile):
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
988 self.certfile = certfile
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
989 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
990 self.port = support.bind_port(sock, '')
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
991 asyncore.dispatcher.__init__(self, sock)
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
992 self.listen(5)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
993
65088
c28fdeeea786 Fix issue 6706: adds new handle_accepted() method to asyncore.dispatcher
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64741
diff changeset
994 def handle_accepted(self, sock_obj, addr):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
995 if support.verbose:
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
996 sys.stdout.write(" server: new connection from %s:%s\n" %addr)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
997 self.ConnectionHandler(sock_obj, self.certfile)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
998
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
999 def handle_error(self):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1000 raise
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1001
46394
8416cdd11c11 Update test_ssl.py to reflect the new approach for writing network-oriented tests in such a way that contention for ports is eliminated, thus allowing multiple instances of the same test to be run in parallel without issue (import for buildbots to run smoothly). This change is in line with the changes made to network-oriented tests in trunk in r62234. test_ssl.py is an odd case because the py3k version was newer than trunk. When the most recent svnmerge was run from trunk to py3k in r62242, the older trunk version was brought over on top of the newer py3k version. So, the plan was/is: revert the recent svnmerged version (done), manually make the changes to improve running in parallel (done with this commit), copy this version back to trunk and manually 3to2 it (to do next), check that in, then svnmerge block it. Then when future changes need to be made to test_ssl.py, we can make them against trunk, and hopefully the merge to py3k should be a lot less painful.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46393
diff changeset
1002 def __init__(self, certfile):
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1003 self.flag = None
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1004 self.active = False
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1005 self.server = self.EchoServer(certfile)
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1006 self.port = self.server.port
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1007 threading.Thread.__init__(self)
48754
2bac0d421929 Merged revisions 65829 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 48681
diff changeset
1008 self.daemon = True
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1009
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1010 def __str__(self):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1011 return "<%s %s>" % (self.__class__.__name__, self.server)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1012
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1013 def __enter__(self):
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1014 self.start(threading.Event())
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1015 self.flag.wait()
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1016 return self
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1017
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1018 def __exit__(self, *args):
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1019 if support.verbose:
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1020 sys.stdout.write(" cleanup: stopping server.\n")
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1021 self.stop()
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1022 if support.verbose:
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1023 sys.stdout.write(" cleanup: joining server thread.\n")
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1024 self.join()
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1025 if support.verbose:
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1026 sys.stdout.write(" cleanup: successfully joined.\n")
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1027
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1028 def start (self, flag=None):
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1029 self.flag = flag
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1030 threading.Thread.start(self)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1031
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1032 def run(self):
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1033 self.active = True
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1034 if self.flag:
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1035 self.flag.set()
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1036 while self.active:
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1037 try:
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1038 asyncore.loop(1)
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1039 except:
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1040 pass
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1041
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1042 def stop(self):
44305
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1043 self.active = False
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1044 self.server.close()
19f894ae864a update to fix leak in SSL code
Bill Janssen <janssen@parc.com>
parents: 43869
diff changeset
1045
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1046 def bad_cert_test(certfile):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1047 """
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1048 Launch a server with CERT_REQUIRED, and check that trying to
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1049 connect to it with the given client certificate fails.
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1050 """
46394
8416cdd11c11 Update test_ssl.py to reflect the new approach for writing network-oriented tests in such a way that contention for ports is eliminated, thus allowing multiple instances of the same test to be run in parallel without issue (import for buildbots to run smoothly). This change is in line with the changes made to network-oriented tests in trunk in r62234. test_ssl.py is an odd case because the py3k version was newer than trunk. When the most recent svnmerge was run from trunk to py3k in r62242, the older trunk version was brought over on top of the newer py3k version. So, the plan was/is: revert the recent svnmerged version (done), manually make the changes to improve running in parallel (done with this commit), copy this version back to trunk and manually 3to2 it (to do next), check that in, then svnmerge block it. Then when future changes need to be made to test_ssl.py, we can make them against trunk, and hopefully the merge to py3k should be a lot less painful.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46393
diff changeset
1051 server = ThreadedEchoServer(CERTFILE,
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1052 certreqs=ssl.CERT_REQUIRED,
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1053 cacerts=CERTFILE, chatty=False,
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1054 connectionchatty=False)
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1055 with server:
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1056 try:
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1057 with socket.socket() as sock:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1058 s = ssl.wrap_socket(sock,
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1059 certfile=certfile,
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1060 ssl_version=ssl.PROTOCOL_TLSv1)
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1061 s.connect((HOST, server.port))
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1062 except ssl.SSLError as x:
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1063 if support.verbose:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1064 sys.stdout.write("\nSSLError is %s\n" % x.args[1])
61012
71152ce701ea Merged revisions 80536 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61008
diff changeset
1065 except socket.error as x:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1066 if support.verbose:
66475
9bead909d8ef Merged revisions 85820,85823,85825,85840,85843-85845,85849-85851,85855,85867,85875,85907-85908,85911,85914 via svnmerge from
Georg Brandl <georg@python.org>
parents: 64743
diff changeset
1067 sys.stdout.write("\nsocket.error is %s\n" % x.args[1])
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
1068 except IOError as x:
64308
80d2e7d1d7d5 in ssl tests rely on IOError.errno rather thanf IOError.strerror for better compatibility across platforms.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64306
diff changeset
1069 if x.errno != errno.ENOENT:
80d2e7d1d7d5 in ssl tests rely on IOError.errno rather thanf IOError.strerror for better compatibility across platforms.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64306
diff changeset
1070 raise
64306
9297974604ff Fix issue issue9706: provides a better error handling for various SSL operations
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64062
diff changeset
1071 if support.verbose:
64308
80d2e7d1d7d5 in ssl tests rely on IOError.errno rather thanf IOError.strerror for better compatibility across platforms.
Giampaolo Rodolà <g.rodola@gmail.com>
parents: 64306
diff changeset
1072 sys.stdout.write("\IOError is %s\n" % str(x))
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1073 else:
61320
cebe28570006 Merged revisions 80869 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61152
diff changeset
1074 raise AssertionError("Use of invalid cert should have failed!")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1075
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1076 def server_params_test(client_context, server_context, indata=b"FOO\n",
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1077 chatty=True, connectionchatty=False):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1078 """
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1079 Launch a server, connect a client to it and try various reads
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1080 and writes.
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1081 """
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1082 server = ThreadedEchoServer(context=server_context,
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1083 chatty=chatty,
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1084 connectionchatty=False)
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1085 with server:
74668
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1086 with client_context.wrap_socket(socket.socket()) as s:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1087 s.connect((HOST, server.port))
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1088 for arg in [indata, bytearray(indata), memoryview(indata)]:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1089 if connectionchatty:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1090 if support.verbose:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1091 sys.stdout.write(
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1092 " client: sending %r...\n" % indata)
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1093 s.write(arg)
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1094 outdata = s.read()
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1095 if connectionchatty:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1096 if support.verbose:
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1097 sys.stdout.write(" client: read %r\n" % outdata)
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1098 if outdata != indata.lower():
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1099 raise AssertionError(
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1100 "bad data <<%r>> (%d) received; expected <<%r>> (%d)\n"
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1101 % (outdata[:20], len(outdata),
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1102 indata[:20].lower(), len(indata)))
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1103 s.write(b"over\n")
57460
a1d166ab18c4 Merged revisions 75529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
1104 if connectionchatty:
a1d166ab18c4 Merged revisions 75529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 52389
diff changeset
1105 if support.verbose:
74668
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1106 sys.stdout.write(" client: closing connection.\n")
10c79f29e417 Issue #13895: fix test_ssl hanging under Ubuntu
Antoine Pitrou <solipsis@pitrou.net>
parents: 74659
diff changeset
1107 s.close()
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1108
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1109 def try_protocol_combo(server_protocol, client_protocol, expect_success,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1110 certsreqs=None, server_options=0, client_options=0):
46222
aed698c8647b Merged revisions 62021,62029,62035-62038,62043-62044,62052-62053 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 45773
diff changeset
1111 if certsreqs is None:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1112 certsreqs = ssl.CERT_NONE
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1113 certtype = {
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1114 ssl.CERT_NONE: "CERT_NONE",
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1115 ssl.CERT_OPTIONAL: "CERT_OPTIONAL",
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1116 ssl.CERT_REQUIRED: "CERT_REQUIRED",
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1117 }[certsreqs]
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1118 if support.verbose:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1119 formatstr = (expect_success and " %s->%s %s\n") or " {%s->%s} %s\n"
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1120 sys.stdout.write(formatstr %
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1121 (ssl.get_protocol_name(client_protocol),
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1122 ssl.get_protocol_name(server_protocol),
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1123 certtype))
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1124 client_context = ssl.SSLContext(client_protocol)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1125 client_context.options = ssl.OP_ALL | client_options
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1126 server_context = ssl.SSLContext(server_protocol)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1127 server_context.options = ssl.OP_ALL | server_options
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1128 for ctx in (client_context, server_context):
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1129 ctx.verify_mode = certsreqs
60662
e5f6de18b715 Merged revisions 80151 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60373
diff changeset
1130 # NOTE: we must enable "ALL" ciphers, otherwise an SSLv23 client
e5f6de18b715 Merged revisions 80151 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60373
diff changeset
1131 # will send an SSLv3 hello (rather than SSLv2) starting from
e5f6de18b715 Merged revisions 80151 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60373
diff changeset
1132 # OpenSSL 1.0.0 (see issue #8322).
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1133 ctx.set_ciphers("ALL")
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1134 ctx.load_cert_chain(CERTFILE)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1135 ctx.load_verify_locations(CERTFILE)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1136 try:
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1137 server_params_test(client_context, server_context,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1138 chatty=False, connectionchatty=False)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1139 # Protocol mismatch can result in either an SSLError, or a
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1140 # "Connection reset by peer" error.
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1141 except ssl.SSLError:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1142 if expect_success:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1143 raise
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1144 except socket.error as e:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1145 if expect_success or e.errno != errno.ECONNRESET:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1146 raise
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1147 else:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1148 if not expect_success:
61317
2166b63b6fdf Issue #8629: Disable some test_ssl tests, since they give different
Antoine Pitrou <solipsis@pitrou.net>
parents: 61153
diff changeset
1149 raise AssertionError(
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1150 "Client protocol %s succeeded with server protocol %s!"
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1151 % (ssl.get_protocol_name(client_protocol),
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1152 ssl.get_protocol_name(server_protocol)))
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1153
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1154
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1155 class ThreadedTests(unittest.TestCase):
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1156
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
1157 @skip_if_broken_ubuntu_ssl
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1158 def test_echo(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1159 """Basic test of an SSL client connecting to a server"""
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1160 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1161 sys.stdout.write("\n")
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1162 for protocol in PROTOCOLS:
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1163 context = ssl.SSLContext(protocol)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1164 context.load_cert_chain(CERTFILE)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1165 server_params_test(context, context,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1166 chatty=True, connectionchatty=True)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1167
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1168 def test_getpeercert(self):
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1169 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1170 sys.stdout.write("\n")
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1171 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1172 context.verify_mode = ssl.CERT_REQUIRED
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1173 context.load_verify_locations(CERTFILE)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1174 context.load_cert_chain(CERTFILE)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1175 server = ThreadedEchoServer(context=context, chatty=False)
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1176 with server:
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1177 s = context.wrap_socket(socket.socket())
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1178 s.connect((HOST, server.port))
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1179 cert = s.getpeercert()
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1180 self.assertTrue(cert, "Can't get peer certificate.")
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1181 cipher = s.cipher()
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1182 if support.verbose:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1183 sys.stdout.write(pprint.pformat(cert) + '\n')
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1184 sys.stdout.write("Connection cipher is " + str(cipher) + '.\n')
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1185 if 'subject' not in cert:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1186 self.fail("No subject field in certificate: %s." %
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1187 pprint.pformat(cert))
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1188 if ((('organizationName', 'Python Software Foundation'),)
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1189 not in cert['subject']):
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1190 self.fail(
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1191 "Missing or invalid 'organizationName' field in certificate subject; "
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1192 "should be 'Python Software Foundation'.")
66114
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
1193 self.assertIn('notBefore', cert)
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
1194 self.assertIn('notAfter', cert)
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
1195 before = ssl.cert_time_to_seconds(cert['notBefore'])
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
1196 after = ssl.cert_time_to_seconds(cert['notAfter'])
eeebb622fd08 Issue #10022: The dictionary returned by the `getpeercert()` method
Antoine Pitrou <solipsis@pitrou.net>
parents: 65739
diff changeset
1197 self.assertLess(before, after)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1198 s.close()
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1199
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1200 def test_empty_cert(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1201 """Connecting with an empty cert file"""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1202 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir,
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1203 "nullcert.pem"))
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1204 def test_malformed_cert(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1205 """Connecting with a badly formatted certificate (syntax error)"""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1206 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir,
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1207 "badcert.pem"))
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1208 def test_nonexisting_cert(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1209 """Connecting with a non-existing cert file"""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1210 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir,
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1211 "wrongcert.pem"))
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1212 def test_malformed_key(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1213 """Connecting with a badly formatted key (syntax error)"""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1214 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir,
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1215 "badkey.pem"))
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1216
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1217 def test_rude_shutdown(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1218 """A brutal shutdown of an SSL server should raise an IOError
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1219 in the client when attempting handshake.
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1220 """
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1221 listener_ready = threading.Event()
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1222 listener_gone = threading.Event()
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1223
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1224 s = socket.socket()
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1225 port = support.bind_port(s, HOST)
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1226
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1227 # `listener` runs in a thread. It sits in an accept() until
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1228 # the main thread connects. Then it rudely closes the socket,
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1229 # and sets Event `listener_gone` to let the main thread know
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1230 # the socket is gone.
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1231 def listener():
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1232 s.listen(5)
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1233 listener_ready.set()
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1234 newsock, addr = s.accept()
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1235 newsock.close()
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1236 s.close()
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1237 listener_gone.set()
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1238
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1239 def connector():
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1240 listener_ready.wait()
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1241 with socket.socket() as c:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1242 c.connect((HOST, port))
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1243 listener_gone.wait()
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1244 try:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1245 ssl_sock = ssl.wrap_socket(c)
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1246 except IOError:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1247 pass
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1248 else:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1249 self.fail('connecting to closed SSL socket should have failed')
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1250
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1251 t = threading.Thread(target=listener)
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1252 t.start()
61000
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1253 try:
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1254 connector()
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1255 finally:
46aae406742d Merged revisions 80524 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60938
diff changeset
1256 t.join()
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1257
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
1258 @skip_if_broken_ubuntu_ssl
69997
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1259 @unittest.skipUnless(hasattr(ssl, 'PROTOCOL_SSLv2'), "need SSLv2")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1260 def test_protocol_sslv2(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1261 """Connecting to an SSLv2 server with various client options"""
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1262 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1263 sys.stdout.write("\n")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1264 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1265 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_OPTIONAL)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1266 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_REQUIRED)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1267 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1268 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, False)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1269 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLSv1, False)
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1270 # SSLv23 client with specific SSL options
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1271 if no_sslv2_implies_sslv3_hello():
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1272 # No SSLv2 => client will use an SSLv3 hello on recent OpenSSLs
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1273 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, False,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1274 client_options=ssl.OP_NO_SSLv2)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1275 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, True,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1276 client_options=ssl.OP_NO_SSLv3)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1277 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, True,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1278 client_options=ssl.OP_NO_TLSv1)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1279
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
1280 @skip_if_broken_ubuntu_ssl
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1281 def test_protocol_sslv23(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1282 """Connecting to an SSLv23 server with various client options"""
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1283 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1284 sys.stdout.write("\n")
69997
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1285 if hasattr(ssl, 'PROTOCOL_SSLv2'):
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1286 try:
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1287 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv2, True)
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1288 except (ssl.SSLError, socket.error) as x:
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1289 # this fails on some older versions of OpenSSL (0.9.7l, for instance)
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1290 if support.verbose:
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1291 sys.stdout.write(
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1292 " SSL2 client to SSL23 server test unexpectedly failed:\n %s\n"
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1293 % str(x))
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1294 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1295 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1296 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1297
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1298 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1299 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_OPTIONAL)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1300 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1301
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1302 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1303 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_REQUIRED)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1304 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1305
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1306 # Server with specific SSL options
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1307 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, False,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1308 server_options=ssl.OP_NO_SSLv3)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1309 # Will choose TLSv1
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1310 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1311 server_options=ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1312 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, False,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1313 server_options=ssl.OP_NO_TLSv1)
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1314
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1315
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
1316 @skip_if_broken_ubuntu_ssl
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1317 def test_protocol_sslv3(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1318 """Connecting to an SSLv3 server with various client options"""
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1319 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1320 sys.stdout.write("\n")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1321 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1322 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1323 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
69997
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1324 if hasattr(ssl, 'PROTOCOL_SSLv2'):
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1325 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv2, False)
73177
415e2c998e18 - Issue #13218: Fix test_ssl failures on Debian/Ubuntu.
Barry Warsaw <barry@python.org>
parents: 72567
diff changeset
1326 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23, False,
415e2c998e18 - Issue #13218: Fix test_ssl failures on Debian/Ubuntu.
Barry Warsaw <barry@python.org>
parents: 72567
diff changeset
1327 client_options=ssl.OP_NO_SSLv3)
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1328 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLSv1, False)
61782
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1329 if no_sslv2_implies_sslv3_hello():
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1330 # No SSLv2 => client will use an SSLv3 hello on recent OpenSSLs
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1331 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23, True,
5ee47f0b26b0 Issue #4870: Add an `options` attribute to SSL contexts, as well as
Antoine Pitrou <solipsis@pitrou.net>
parents: 61668
diff changeset
1332 client_options=ssl.OP_NO_SSLv2)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1333
63741
828227a00538 Try to fix issue #9415: skip some tests on broken Ubuntu OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents: 63740
diff changeset
1334 @skip_if_broken_ubuntu_ssl
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1335 def test_protocol_tlsv1(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1336 """Connecting to a TLSv1 server with various client options"""
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1337 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1338 sys.stdout.write("\n")
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1339 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1340 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1341 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
69997
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1342 if hasattr(ssl, 'PROTOCOL_SSLv2'):
b7abf0590e1c Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67467
diff changeset
1343 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, False)
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1344 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False)
73177
415e2c998e18 - Issue #13218: Fix test_ssl failures on Debian/Ubuntu.
Barry Warsaw <barry@python.org>
parents: 72567
diff changeset
1345 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv23, False,
415e2c998e18 - Issue #13218: Fix test_ssl failures on Debian/Ubuntu.
Barry Warsaw <barry@python.org>
parents: 72567
diff changeset
1346 client_options=ssl.OP_NO_TLSv1)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1347
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1348 def test_starttls(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1349 """Switching from clear text to encrypted and back again."""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1350 msgs = (b"msg 1", b"MSG 2", b"STARTTLS", b"MSG 3", b"msg 4", b"ENDTLS", b"msg 5", b"msg 6")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1351
46394
8416cdd11c11 Update test_ssl.py to reflect the new approach for writing network-oriented tests in such a way that contention for ports is eliminated, thus allowing multiple instances of the same test to be run in parallel without issue (import for buildbots to run smoothly). This change is in line with the changes made to network-oriented tests in trunk in r62234. test_ssl.py is an odd case because the py3k version was newer than trunk. When the most recent svnmerge was run from trunk to py3k in r62242, the older trunk version was brought over on top of the newer py3k version. So, the plan was/is: revert the recent svnmerged version (done), manually make the changes to improve running in parallel (done with this commit), copy this version back to trunk and manually 3to2 it (to do next), check that in, then svnmerge block it. Then when future changes need to be made to test_ssl.py, we can make them against trunk, and hopefully the merge to py3k should be a lot less painful.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46393
diff changeset
1352 server = ThreadedEchoServer(CERTFILE,
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1353 ssl_version=ssl.PROTOCOL_TLSv1,
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1354 starttls_server=True,
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1355 chatty=True,
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1356 connectionchatty=True)
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1357 wrapped = False
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1358 with server:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1359 s = socket.socket()
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1360 s.setblocking(1)
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1361 s.connect((HOST, server.port))
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1362 if support.verbose:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1363 sys.stdout.write("\n")
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1364 for indata in msgs:
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1365 if support.verbose:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1366 sys.stdout.write(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1367 " client: sending %r...\n" % indata)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1368 if wrapped:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1369 conn.write(indata)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1370 outdata = conn.read()
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1371 else:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1372 s.send(indata)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1373 outdata = s.recv(1024)
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1374 msg = outdata.strip().lower()
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1375 if indata == b"STARTTLS" and msg.startswith(b"ok"):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1376 # STARTTLS ok, switch to secure mode
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1377 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1378 sys.stdout.write(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1379 " client: read %r from server, starting TLS...\n"
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1380 % msg)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1381 conn = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1382 wrapped = True
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1383 elif indata == b"ENDTLS" and msg.startswith(b"ok"):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1384 # ENDTLS ok, switch back to clear text
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1385 if support.verbose:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1386 sys.stdout.write(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1387 " client: read %r from server, ending TLS...\n"
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1388 % msg)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1389 s = conn.unwrap()
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1390 wrapped = False
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1391 else:
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1392 if support.verbose:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1393 sys.stdout.write(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1394 " client: read %r from server\n" % msg)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1395 if support.verbose:
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1396 sys.stdout.write(" client: closing connection.\n")
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1397 if wrapped:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1398 conn.write(b"over\n")
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1399 else:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1400 s.send(b"over\n")
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1401 if wrapped:
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1402 conn.close()
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1403 else:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1404 s.close()
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1405
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1406 def test_socketserver(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1407 """Using a SocketServer to create and manage SSL connections."""
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1408 server = make_https_server(self, CERTFILE)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1409 # try to connect
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1410 if support.verbose:
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1411 sys.stdout.write('\n')
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1412 with open(CERTFILE, 'rb') as f:
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1413 d1 = f.read()
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1414 d2 = ''
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1415 # now fetch the same data from the HTTPS server
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1416 url = 'https://%s:%d/%s' % (
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1417 HOST, server.port, os.path.split(CERTFILE)[1])
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1418 f = urllib.request.urlopen(url)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1419 try:
47635
f31e32a2013c Patch for issue 2848, mostly by Humberto Diogenes, with a couple of
Barry Warsaw <barry@python.org>
parents: 47624
diff changeset
1420 dlen = f.info().get("content-length")
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1421 if dlen and (int(dlen) > 0):
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1422 d2 = f.read(int(dlen))
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1423 if support.verbose:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1424 sys.stdout.write(
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1425 " client: read %d bytes from remote server '%s'\n"
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1426 % (len(d2), server))
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1427 finally:
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1428 f.close()
65247
12327b9d3325 Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and
Antoine Pitrou <solipsis@pitrou.net>
parents: 65223
diff changeset
1429 self.assertEqual(d1, d2)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1430
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1431 def test_asyncore_server(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1432 """Check the example asyncore integration."""
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1433 indata = "TEST MESSAGE of mixed case\n"
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1434
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1435 if support.verbose:
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1436 sys.stdout.write("\n")
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1437
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1438 indata = b"FOO\n"
46394
8416cdd11c11 Update test_ssl.py to reflect the new approach for writing network-oriented tests in such a way that contention for ports is eliminated, thus allowing multiple instances of the same test to be run in parallel without issue (import for buildbots to run smoothly). This change is in line with the changes made to network-oriented tests in trunk in r62234. test_ssl.py is an odd case because the py3k version was newer than trunk. When the most recent svnmerge was run from trunk to py3k in r62242, the older trunk version was brought over on top of the newer py3k version. So, the plan was/is: revert the recent svnmerged version (done), manually make the changes to improve running in parallel (done with this commit), copy this version back to trunk and manually 3to2 it (to do next), check that in, then svnmerge block it. Then when future changes need to be made to test_ssl.py, we can make them against trunk, and hopefully the merge to py3k should be a lot less painful.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46393
diff changeset
1439 server = AsyncoreEchoServer(CERTFILE)
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1440 with server:
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1441 s = ssl.wrap_socket(socket.socket())
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1442 s.connect(('127.0.0.1', server.port))
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1443 if support.verbose:
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1444 sys.stdout.write(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1445 " client: sending %r...\n" % indata)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1446 s.write(indata)
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1447 outdata = s.read()
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1448 if support.verbose:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1449 sys.stdout.write(" client: read %r\n" % outdata)
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1450 if outdata != indata.lower():
61008
c869408d4d3e Merged revisions 80532 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61005
diff changeset
1451 self.fail(
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1452 "bad data <<%r>> (%d) received; expected <<%r>> (%d)\n"
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1453 % (outdata[:20], len(outdata),
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1454 indata[:20].lower(), len(indata)))
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1455 s.write(b"over\n")
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1456 if support.verbose:
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1457 sys.stdout.write(" client: closing connection.\n")
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1458 s.close()
64055
e9e0a00ccfb3 Add debug output to the asyncore test
Antoine Pitrou <solipsis@pitrou.net>
parents: 64054
diff changeset
1459 if support.verbose:
e9e0a00ccfb3 Add debug output to the asyncore test
Antoine Pitrou <solipsis@pitrou.net>
parents: 64054
diff changeset
1460 sys.stdout.write(" client: connection closed.\n")
46393
645c535f8223 Revert r62242: trunk's test_ssl.py isn't as up-to-date as py3k's, and should't have been brought over in the merge.
Trent Nelson <trent.nelson@snakebite.org>
parents: 46370
diff changeset
1461
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1462 def test_recv_send(self):
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1463 """Test recv(), send() and friends."""
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1464 if support.verbose:
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1465 sys.stdout.write("\n")
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1466
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1467 server = ThreadedEchoServer(CERTFILE,
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1468 certreqs=ssl.CERT_NONE,
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1469 ssl_version=ssl.PROTOCOL_TLSv1,
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1470 cacerts=CERTFILE,
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1471 chatty=True,
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1472 connectionchatty=False)
74115
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1473 with server:
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1474 s = ssl.wrap_socket(socket.socket(),
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1475 server_side=False,
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1476 certfile=CERTFILE,
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1477 ca_certs=CERTFILE,
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1478 cert_reqs=ssl.CERT_NONE,
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1479 ssl_version=ssl.PROTOCOL_TLSv1)
82557279efd2 Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73177
diff changeset
1480 s.connect((HOST, server.port))
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1481 # helper methods for standardising recv* method signatures
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1482 def _recv_into():
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1483 b = bytearray(b"\0"*100)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1484 count = s.recv_into(b)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1485 return b[:count]
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1486
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1487 def _recvfrom_into():
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1488 b = bytearray(b"\0"*100)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1489 count, addr = s.recvfrom_into(b)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1490 return b[:count]
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1491
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1492 # (name, method, whether to expect success, *args)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1493 send_methods = [
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1494 ('send', s.send, True, []),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1495 ('sendto', s.sendto, False, ["some.address"]),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1496 ('sendall', s.sendall, True, []),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1497 ]
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1498 recv_methods = [
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1499 ('recv', s.recv, True, []),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1500 ('recvfrom', s.recvfrom, False, ["some.address"]),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1501 ('recv_into', _recv_into, True, []),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1502 ('recvfrom_into', _recvfrom_into, False, []),
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1503 ]
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1504 data_prefix = "PREFIX_"
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1505
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1506 for meth_name, send_meth, expect_success, args in send_methods:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1507 indata = (data_prefix + meth_name).encode('ascii')
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1508 try:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1509 send_meth(indata, *args)
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1510 outdata = s.read()
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1511 if outdata != indata.lower():
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1512 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1513 "While sending with <<{name:s}>> bad data "
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1514 "<<{outdata:r}>> ({nout:d}) received; "
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1515 "expected <<{indata:r}>> ({nin:d})\n".format(
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1516 name=meth_name, outdata=outdata[:20],
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1517 nout=len(outdata),
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1518 indata=indata[:20], nin=len(indata)
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1519 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1520 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1521 except ValueError as e:
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1522 if expect_success:
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1523 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1524 "Failed to send with method <<{name:s}>>; "
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1525 "expected to succeed.\n".format(name=meth_name)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1526 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1527 if not str(e).startswith(meth_name):
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1528 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1529 "Method <<{name:s}>> failed with unexpected "
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1530 "exception message: {exp:s}\n".format(
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1531 name=meth_name, exp=e
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1532 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1533 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1534
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1535 for meth_name, recv_meth, expect_success, args in recv_methods:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1536 indata = (data_prefix + meth_name).encode('ascii')
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1537 try:
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1538 s.send(indata)
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1539 outdata = recv_meth(*args)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1540 if outdata != indata.lower():
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1541 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1542 "While receiving with <<{name:s}>> bad data "
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1543 "<<{outdata:r}>> ({nout:d}) received; "
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1544 "expected <<{indata:r}>> ({nin:d})\n".format(
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1545 name=meth_name, outdata=outdata[:20],
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1546 nout=len(outdata),
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1547 indata=indata[:20], nin=len(indata)
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1548 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1549 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1550 except ValueError as e:
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1551 if expect_success:
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1552 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1553 "Failed to receive with method <<{name:s}>>; "
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1554 "expected to succeed.\n".format(name=meth_name)
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1555 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1556 if not str(e).startswith(meth_name):
59613
77c71f258df7 Merged revisions 78018,78035-78040,78042-78043,78046,78048-78052,78054,78059,78075-78080 via svnmerge from
Georg Brandl <georg@python.org>
parents: 57460
diff changeset
1557 self.fail(
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1558 "Method <<{name:s}>> failed with unexpected "
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1559 "exception message: {exp:s}\n".format(
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1560 name=meth_name, exp=e
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1561 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1562 )
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1563 # consume data
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1564 s.read()
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1565 s.write(b"over\n")
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1566 s.close()
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1567
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1568 def test_handshake_timeout(self):
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1569 # Issue #5103: SSL handshake must respect the socket timeout
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1570 server = socket.socket(socket.AF_INET)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1571 host = "127.0.0.1"
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1572 port = support.bind_port(server)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1573 started = threading.Event()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1574 finish = False
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1575
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1576 def serve():
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1577 server.listen(5)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1578 started.set()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1579 conns = []
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1580 while not finish:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1581 r, w, e = select.select([server], [], [], 0.1)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1582 if server in r:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1583 # Let the socket hang around rather than having
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1584 # it closed by garbage collection.
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1585 conns.append(server.accept()[0])
65739
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1586 for sock in conns:
e38d2d173085 Clean up socket closing in test_ssl and test.ssl_servers
Antoine Pitrou <solipsis@pitrou.net>
parents: 65620
diff changeset
1587 sock.close()
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1588
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1589 t = threading.Thread(target=serve)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1590 t.start()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1591 started.wait()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1592
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1593 try:
60938
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1594 try:
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1595 c = socket.socket(socket.AF_INET)
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1596 c.settimeout(0.2)
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1597 c.connect((host, port))
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1598 # Will attempt handshake and time out
66663
3d9a86b8cc98 Issue #10272: The ssl module now raises socket.timeout instead of a generic
Antoine Pitrou <solipsis@pitrou.net>
parents: 66581
diff changeset
1599 self.assertRaisesRegex(socket.timeout, "timed out",
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
1600 ssl.wrap_socket, c)
60938
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1601 finally:
0ff8adde609c Merged revisions 80456 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60936
diff changeset
1602 c.close()
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1603 try:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1604 c = socket.socket(socket.AF_INET)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1605 c = ssl.wrap_socket(c)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1606 c.settimeout(0.2)
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1607 # Will attempt handshake and time out
66663
3d9a86b8cc98 Issue #10272: The ssl module now raises socket.timeout instead of a generic
Antoine Pitrou <solipsis@pitrou.net>
parents: 66581
diff changeset
1608 self.assertRaisesRegex(socket.timeout, "timed out",
66581
38bec90fd8ab #10273: Rename assertRegexpMatches and assertRaisesRegexp to assertRegex and assertRaisesRegex.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66217
diff changeset
1609 c.connect, (host, port))
60936
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1610 finally:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1611 c.close()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1612 finally:
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1613 finish = True
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1614 t.join()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1615 server.close()
5ed34f3f6c35 Merged revisions 80454 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 60918
diff changeset
1616
74248
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1617 def test_default_ciphers(self):
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1618 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1619 try:
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1620 # Force a set of weak ciphers on our client context
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1621 context.set_ciphers("DES")
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1622 except ssl.SSLError:
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1623 self.skipTest("no DES cipher available")
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1624 with ThreadedEchoServer(CERTFILE,
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1625 ssl_version=ssl.PROTOCOL_SSLv23,
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1626 chatty=False) as server:
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1627 with socket.socket() as sock:
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1628 s = context.wrap_socket(sock)
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1629 with self.assertRaises((OSError, ssl.SSLError)):
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1630 s.connect((HOST, server.port))
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1631 self.assertIn("no shared cipher", str(server.conn_errors[0]))
25c2d24e1b11 Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents: 74115
diff changeset
1632
49090
ac3b67043361 fixes from issue 3162 for SSL module
Bill Janssen <janssen@parc.com>
parents: 48754
diff changeset
1633
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1634 def test_main(verbose=False):
63740
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1635 if support.verbose:
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1636 plats = {
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1637 'Linux': platform.linux_distribution,
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1638 'Mac': platform.mac_ver,
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1639 'Windows': platform.win32_ver,
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1640 }
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1641 for name, func in plats.items():
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1642 plat = func()
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1643 if plat and plat[0]:
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1644 plat = '%s %r' % (name, plat)
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1645 break
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1646 else:
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1647 plat = repr(platform.platform())
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1648 print("test_ssl: testing with %r %r" %
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1649 (ssl.OPENSSL_VERSION, ssl.OPENSSL_VERSION_INFO))
2d88ca64a90b In verbose mode, identify OpenSSL build and platform more precisely
Antoine Pitrou <solipsis@pitrou.net>
parents: 62276
diff changeset
1650 print(" under %s" % plat)
65593
846c0e1342d0 Issue #5639: Add a *server_hostname* argument to `SSLContext.wrap_socket`
Antoine Pitrou <solipsis@pitrou.net>
parents: 65252
diff changeset
1651 print(" HAS_SNI = %r" % ssl.HAS_SNI)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1652
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1653 for filename in [
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1654 CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, BYTES_CERTFILE,
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1655 ONLYCERT, ONLYKEY, BYTES_ONLYCERT, BYTES_ONLYKEY,
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1656 BADCERT, BADKEY, EMPTYCERT]:
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1657 if not os.path.exists(filename):
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1658 raise support.TestFailed("Can't read certificate file %r" % filename)
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1659
61635
4bb03cc1d421 Issue #8550: Add first class `SSLContext` objects to the ssl module.
Antoine Pitrou <solipsis@pitrou.net>
parents: 61320
diff changeset
1660 tests = [ContextTests, BasicSocketTests]
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1661
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1662 if support.is_resource_enabled('network'):
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1663 tests.append(NetworkedTests)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1664
43400
1bac386c17cc Merged revisions 58095-58132,58136-58148,58151-58197 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 43292
diff changeset
1665 if _have_threads:
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1666 thread_info = support.threading_setup()
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 46394
diff changeset
1667 if thread_info and support.is_resource_enabled('network'):
43869
b59825d9db8f get SSL support to work again
Bill Janssen <janssen@parc.com>
parents: 43400
diff changeset
1668 tests.append(ThreadedTests)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1669
61072
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1670 try:
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1671 support.run_unittest(*tests)
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1672 finally:
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1673 if _have_threads:
1d2b322c46be Merged revisions 80598 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61035
diff changeset
1674 support.threading_cleanup(*thread_info)
42954
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1675
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1676 if __name__ == "__main__":
27f0289b6835 Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
diff changeset
1677 test_main()