Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_ssl.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 706115cb2cdb |
| children | 3436769a7964 |
| rev | line source |
|---|---|
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Test the support for SSL and sockets |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 import sys |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 import unittest |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 from test import test_support |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
6 import asyncore |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 import socket |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
8 import select |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 import time |
|
60912
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
10 import gc |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 import os |
|
60912
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
12 import errno |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 import pprint |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
14 import urllib, urlparse |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 import traceback |
|
60906
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
16 import weakref |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
17 import functools |
|
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
18 import platform |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
20 from BaseHTTPServer import HTTPServer |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
21 from SimpleHTTPServer import SimpleHTTPRequestHandler |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
22 |
|
70270
d5771ed4ec4e
Issue #12012: test_ssl uses test_support.import_module()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70001
diff
changeset
|
23 ssl = test_support.import_module("ssl") |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
25 HOST = test_support.HOST |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 CERTFILE = None |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
27 SVN_PYTHON_ORG_ROOT_CERT = None |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 |
|
42884
8e12d56dd603
Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents:
42883
diff
changeset
|
29 def handle_error(prefix): |
|
8e12d56dd603
Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents:
42883
diff
changeset
|
30 exc_format = ' '.join(traceback.format_exception(*sys.exc_info())) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
31 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
32 sys.stdout.write(prefix + exc_format) |
|
42884
8e12d56dd603
Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents:
42883
diff
changeset
|
33 |
|
61002
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
34 |
|
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
35 class BasicTests(unittest.TestCase): |
|
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
36 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
37 def test_sslwrap_simple(self): |
|
61002
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
38 # A crude test for the legacy API |
|
49340
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
39 try: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
40 ssl.sslwrap_simple(socket.socket(socket.AF_INET)) |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
41 except IOError, e: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
42 if e.errno == 32: # broken pipe when ssl_sock.do_handshake(), this test doesn't care about that |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
43 pass |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
44 else: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
45 raise |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
46 try: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
47 ssl.sslwrap_simple(socket.socket(socket.AF_INET)._sock) |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
48 except IOError, e: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
49 if e.errno == 32: # broken pipe when ssl_sock.do_handshake(), this test doesn't care about that |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
50 pass |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
51 else: |
|
40536ddc26a1
fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents:
49089
diff
changeset
|
52 raise |
|
42884
8e12d56dd603
Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents:
42883
diff
changeset
|
53 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
54 # Issue #9415: Ubuntu hijacks their OpenSSL and forcefully disables SSLv2 |
|
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
55 def skip_if_broken_ubuntu_ssl(func): |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
56 if hasattr(ssl, 'PROTOCOL_SSLv2'): |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
57 # We need to access the lower-level wrapper in order to create an |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
58 # implicit SSL context without trying to connect or listen. |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
59 try: |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
60 import _ssl |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
61 except ImportError: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
62 # The returned function won't get executed, just ignore the error |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
63 pass |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
64 @functools.wraps(func) |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
65 def f(*args, **kwargs): |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
66 try: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
67 s = socket.socket(socket.AF_INET) |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
68 _ssl.sslwrap(s._sock, 0, None, None, |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
69 ssl.CERT_NONE, ssl.PROTOCOL_SSLv2, None, None) |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
70 except ssl.SSLError as e: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
71 if (ssl.OPENSSL_VERSION_INFO == (0, 9, 8, 15, 15) and |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
72 platform.linux_distribution() == ('debian', 'squeeze/sid', '') |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
73 and 'Invalid SSL protocol variant specified' in str(e)): |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
74 raise unittest.SkipTest("Patched Ubuntu OpenSSL breaks behaviour") |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
75 return func(*args, **kwargs) |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
76 return f |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
77 else: |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
78 return func |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
79 |
|
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
80 |
|
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
81 class BasicSocketTests(unittest.TestCase): |
|
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
82 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
83 def test_constants(self): |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
84 #ssl.PROTOCOL_SSLv2 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
85 ssl.PROTOCOL_SSLv23 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
86 ssl.PROTOCOL_SSLv3 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
87 ssl.PROTOCOL_TLSv1 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
88 ssl.CERT_NONE |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
89 ssl.CERT_OPTIONAL |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
90 ssl.CERT_REQUIRED |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
92 def test_random(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
93 v = ssl.RAND_status() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
94 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
95 sys.stdout.write("\n RAND_status is %d (%s)\n" |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
96 % (v, (v and "sufficient randomness") or |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
97 "insufficient randomness")) |
|
78982
706115cb2cdb
Closes #15793: Stack corruption in ssl.RAND_egd(). Python 2.7 hasn't any issue about this, but add a test just to be sure
Jesus Cea <jcea@jcea.es>
parents:
76751
diff
changeset
|
98 self.assertRaises(TypeError, ssl.RAND_egd, 1) |
|
706115cb2cdb
Closes #15793: Stack corruption in ssl.RAND_egd(). Python 2.7 hasn't any issue about this, but add a test just to be sure
Jesus Cea <jcea@jcea.es>
parents:
76751
diff
changeset
|
99 self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
100 ssl.RAND_add("this is a random string", 75.0) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
101 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
102 def test_parse_cert(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
103 # note that this uses an 'unofficial' function in _ssl.c, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
104 # provided solely for this test, to exercise the certificate |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
105 # parsing code |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
106 p = ssl._ssl._test_decode_cert(CERTFILE, False) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
107 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
108 sys.stdout.write("\n" + pprint.pformat(p) + "\n") |
|
72569
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
109 self.assertEqual(p['subject'], |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
110 ((('countryName', u'US'),), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
111 (('stateOrProvinceName', u'Delaware'),), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
112 (('localityName', u'Wilmington'),), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
113 (('organizationName', u'Python Software Foundation'),), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
114 (('organizationalUnitName', u'SSL'),), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
115 (('commonName', u'somemachine.python.org'),)), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
116 ) |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
117 # Issue #13034: the subjectAltName in some certificates |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
118 # (notably projects.developer.nokia.com:443) wasn't parsed |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
119 p = ssl._ssl._test_decode_cert(NOKIACERT) |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
120 if test_support.verbose: |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
121 sys.stdout.write("\n" + pprint.pformat(p) + "\n") |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
122 self.assertEqual(p['subjectAltName'], |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
123 (('DNS', 'projects.developer.nokia.com'), |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
124 ('DNS', 'projects.forum.nokia.com')) |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
125 ) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
126 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
127 def test_DER_to_PEM(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
128 with open(SVN_PYTHON_ORG_ROOT_CERT, 'r') as f: |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
129 pem = f.read() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
130 d1 = ssl.PEM_cert_to_DER_cert(pem) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
131 p2 = ssl.DER_cert_to_PEM_cert(d1) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
132 d2 = ssl.PEM_cert_to_DER_cert(p2) |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
133 self.assertEqual(d1, d2) |
|
61033
316b57017d0f
Merged revisions 80557 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61010
diff
changeset
|
134 if not p2.startswith(ssl.PEM_HEADER + '\n'): |
|
316b57017d0f
Merged revisions 80557 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61010
diff
changeset
|
135 self.fail("DER-to-PEM didn't include correct header:\n%r\n" % p2) |
|
316b57017d0f
Merged revisions 80557 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61010
diff
changeset
|
136 if not p2.endswith('\n' + ssl.PEM_FOOTER + '\n'): |
|
316b57017d0f
Merged revisions 80557 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61010
diff
changeset
|
137 self.fail("DER-to-PEM didn't include correct footer:\n%r\n" % p2) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
138 |
|
60372
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
139 def test_openssl_version(self): |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
140 n = ssl.OPENSSL_VERSION_NUMBER |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
141 t = ssl.OPENSSL_VERSION_INFO |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
142 s = ssl.OPENSSL_VERSION |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
143 self.assertIsInstance(n, (int, long)) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
144 self.assertIsInstance(t, tuple) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
145 self.assertIsInstance(s, str) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
146 # Some sanity checks follow |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
147 # >= 0.9 |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
148 self.assertGreaterEqual(n, 0x900000) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
149 # < 2.0 |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
150 self.assertLess(n, 0x20000000) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
151 major, minor, fix, patch, status = t |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
152 self.assertGreaterEqual(major, 0) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
153 self.assertLess(major, 2) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
154 self.assertGreaterEqual(minor, 0) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
155 self.assertLess(minor, 256) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
156 self.assertGreaterEqual(fix, 0) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
157 self.assertLess(fix, 256) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
158 self.assertGreaterEqual(patch, 0) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
159 self.assertLessEqual(patch, 26) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
160 self.assertGreaterEqual(status, 0) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
161 self.assertLessEqual(status, 15) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
162 # Version string as returned by OpenSSL, the format might change |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
163 self.assertTrue(s.startswith("OpenSSL {:d}.{:d}.{:d}".format(major, minor, fix)), |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
164 (s, t)) |
|
664173984f2d
Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
Antoine Pitrou <solipsis@pitrou.net>
parents:
59783
diff
changeset
|
165 |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
166 def test_ciphers(self): |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
167 if not test_support.is_resource_enabled('network'): |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
168 return |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
169 remote = ("svn.python.org", 443) |
|
65813
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
170 with test_support.transient_internet(remote[0]): |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
171 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
172 cert_reqs=ssl.CERT_NONE, ciphers="ALL") |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
173 s.connect(remote) |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
174 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
175 cert_reqs=ssl.CERT_NONE, ciphers="DEFAULT") |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
176 s.connect(remote) |
|
65813
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
177 # Error checking occurs when connecting, because the SSL context |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
178 # isn't created before. |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
179 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
180 cert_reqs=ssl.CERT_NONE, ciphers="^$:,;?*'dorothyx") |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
181 with self.assertRaisesRegexp(ssl.SSLError, "No cipher can be selected"): |
|
32c191a5c1cf
Don't fail in test_ssl when svn.python.org is unavailable
Antoine Pitrou <solipsis@pitrou.net>
parents:
64740
diff
changeset
|
182 s.connect(remote) |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
183 |
|
60904
2c31dac694ff
Issue #7943: Fix circular reference created when instantiating an SSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60869
diff
changeset
|
184 @test_support.cpython_only |
|
60906
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
185 def test_refcycle(self): |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
186 # Issue #7943: an SSL object doesn't create reference cycles with |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
187 # itself. |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
188 s = socket.socket(socket.AF_INET) |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
189 ss = ssl.wrap_socket(s) |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
190 wr = weakref.ref(ss) |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
191 del ss |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
192 self.assertEqual(wr(), None) |
|
74e49fb5ba12
Merged revisions 80423 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60870
diff
changeset
|
193 |
|
64740
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
194 def test_wrapped_unconnected(self): |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
195 # The _delegate_methods in socket.py are correctly delegated to by an |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
196 # unconnected SSLSocket, so they will raise a socket.error rather than |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
197 # something unexpected like TypeError. |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
198 s = socket.socket(socket.AF_INET) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
199 ss = ssl.wrap_socket(s) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
200 self.assertRaises(socket.error, ss.recv, 1) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
201 self.assertRaises(socket.error, ss.recv_into, bytearray(b'x')) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
202 self.assertRaises(socket.error, ss.recvfrom, 1) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
203 self.assertRaises(socket.error, ss.recvfrom_into, bytearray(b'x'), 1) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
204 self.assertRaises(socket.error, ss.send, b'x') |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
205 self.assertRaises(socket.error, ss.sendto, b'x', ('0.0.0.0', 0)) |
|
7f99ac53014a
Issue #9729: Fix the signature of SSLSocket.recvfrom() and
Antoine Pitrou <solipsis@pitrou.net>
parents:
64734
diff
changeset
|
206 |
|
60912
068a2e7157ac
Merged revisions 80428 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60906
diff
changeset
|
207 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
208 class NetworkedTests(unittest.TestCase): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
209 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
210 def test_connect(self): |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
211 with test_support.transient_internet("svn.python.org"): |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
212 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
213 cert_reqs=ssl.CERT_NONE) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
214 s.connect(("svn.python.org", 443)) |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
215 c = s.getpeercert() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
216 if c: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
217 self.fail("Peer cert %s shouldn't be here!") |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
218 s.close() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
219 |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
220 # this should fail because we have no verification certs |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
221 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
222 cert_reqs=ssl.CERT_REQUIRED) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
223 try: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
224 s.connect(("svn.python.org", 443)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
225 except ssl.SSLError: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
226 pass |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
227 finally: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
228 s.close() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
229 |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
230 # this should succeed because we specify the root cert |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
231 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
232 cert_reqs=ssl.CERT_REQUIRED, |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
233 ca_certs=SVN_PYTHON_ORG_ROOT_CERT) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
234 try: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
235 s.connect(("svn.python.org", 443)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
236 finally: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
237 s.close() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
238 |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
239 def test_connect_ex(self): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
240 # Issue #11326: check connect_ex() implementation |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
241 with test_support.transient_internet("svn.python.org"): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
242 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
243 cert_reqs=ssl.CERT_REQUIRED, |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
244 ca_certs=SVN_PYTHON_ORG_ROOT_CERT) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
245 try: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
246 self.assertEqual(0, s.connect_ex(("svn.python.org", 443))) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
247 self.assertTrue(s.getpeercert()) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
248 finally: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
249 s.close() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
250 |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
251 def test_non_blocking_connect_ex(self): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
252 # Issue #11326: non-blocking connect_ex() should allow handshake |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
253 # to proceed after the socket gets ready. |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
254 with test_support.transient_internet("svn.python.org"): |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
255 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
256 cert_reqs=ssl.CERT_REQUIRED, |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
257 ca_certs=SVN_PYTHON_ORG_ROOT_CERT, |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
258 do_handshake_on_connect=False) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
259 try: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
260 s.setblocking(False) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
261 rc = s.connect_ex(('svn.python.org', 443)) |
|
68051
21436e48161f
Merged revisions 88671 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
68047
diff
changeset
|
262 # EWOULDBLOCK under Windows, EINPROGRESS elsewhere |
|
21436e48161f
Merged revisions 88671 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
68047
diff
changeset
|
263 self.assertIn(rc, (0, errno.EINPROGRESS, errno.EWOULDBLOCK)) |
|
68047
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
264 # Wait for connect to finish |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
265 select.select([], [s], [], 5.0) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
266 # Non-blocking handshake |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
267 while True: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
268 try: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
269 s.do_handshake() |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
270 break |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
271 except ssl.SSLError as err: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
272 if err.args[0] == ssl.SSL_ERROR_WANT_READ: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
273 select.select([s], [], [], 5.0) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
274 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
275 select.select([], [s], [], 5.0) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
276 else: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
277 raise |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
278 # SSL established |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
279 self.assertTrue(s.getpeercert()) |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
280 finally: |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
281 s.close() |
|
742d73a99425
Merged revisions 88664 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67469
diff
changeset
|
282 |
|
60915
672adfc5db47
Make test_makefile_close a networked test (can't read() from a non-connected
Antoine Pitrou <solipsis@pitrou.net>
parents:
60909
diff
changeset
|
283 @unittest.skipIf(os.name == "nt", "Can't use a socket as a file under Windows") |
|
60916
65d6c7bc5d5a
Merged revisions 80434 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
284 def test_makefile_close(self): |
|
65d6c7bc5d5a
Merged revisions 80434 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
285 # Issue #5238: creating a file-like object with makefile() shouldn't |
|
65d6c7bc5d5a
Merged revisions 80434 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
286 # delay closing the underlying "real socket" (here tested with its |
|
65d6c7bc5d5a
Merged revisions 80434 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
287 # file descriptor, hence skipping the test under Windows). |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
288 with test_support.transient_internet("svn.python.org"): |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
289 ss = ssl.wrap_socket(socket.socket(socket.AF_INET)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
290 ss.connect(("svn.python.org", 443)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
291 fd = ss.fileno() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
292 f = ss.makefile() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
293 f.close() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
294 # The fd is still open |
|
60916
65d6c7bc5d5a
Merged revisions 80434 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60912
diff
changeset
|
295 os.read(fd, 0) |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
296 # Closing the SSL socket should close the fd too |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
297 ss.close() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
298 gc.collect() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
299 with self.assertRaises(OSError) as e: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
300 os.read(fd, 0) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
301 self.assertEqual(e.exception.errno, errno.EBADF) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
302 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
303 def test_non_blocking_handshake(self): |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
304 with test_support.transient_internet("svn.python.org"): |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
305 s = socket.socket(socket.AF_INET) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
306 s.connect(("svn.python.org", 443)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
307 s.setblocking(False) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
308 s = ssl.wrap_socket(s, |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
309 cert_reqs=ssl.CERT_NONE, |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
310 do_handshake_on_connect=False) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
311 count = 0 |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
312 while True: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
313 try: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
314 count += 1 |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
315 s.do_handshake() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
316 break |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
317 except ssl.SSLError, err: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
318 if err.args[0] == ssl.SSL_ERROR_WANT_READ: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
319 select.select([s], [], []) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
320 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
321 select.select([], [s], []) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
322 else: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
323 raise |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
324 s.close() |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
325 if test_support.verbose: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
326 sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
327 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
328 def test_get_server_certificate(self): |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
329 with test_support.transient_internet("svn.python.org"): |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
330 pem = ssl.get_server_certificate(("svn.python.org", 443)) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
331 if not pem: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
332 self.fail("No server certificate on svn.python.org:443!") |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
333 |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
334 try: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
335 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=CERTFILE) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
336 except ssl.SSLError: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
337 #should fail |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
338 pass |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
339 else: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
340 self.fail("Got server certificate %s for svn.python.org!" % pem) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
341 |
|
64587
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
342 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=SVN_PYTHON_ORG_ROOT_CERT) |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
343 if not pem: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
344 self.fail("No server certificate on svn.python.org:443!") |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
345 if test_support.verbose: |
|
d13c2f90c169
Merged revisions 84650 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64539
diff
changeset
|
346 sys.stdout.write("\nVerified certificate for svn.python.org:443 is\n%s\n" % pem) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
347 |
|
60816
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
348 def test_algorithms(self): |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
349 # Issue #8484: all algorithms should be available when verifying a |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
350 # certificate. |
|
60869
b66fa7770bbd
Skip test on old versions of OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60868
diff
changeset
|
351 # SHA256 was added in OpenSSL 0.9.8 |
|
b66fa7770bbd
Skip test on old versions of OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60868
diff
changeset
|
352 if ssl.OPENSSL_VERSION_INFO < (0, 9, 8, 0, 15): |
|
b66fa7770bbd
Skip test on old versions of OpenSSL
Antoine Pitrou <solipsis@pitrou.net>
parents:
60868
diff
changeset
|
353 self.skipTest("SHA256 not available on %r" % ssl.OPENSSL_VERSION) |
|
76751
8215aaccc9dd
Skip test_algorithms (known remote hosts need SNI, which is only available on 3.2+)
Antoine Pitrou <solipsis@pitrou.net>
parents:
74661
diff
changeset
|
354 self.skipTest("remote host needs SNI, only available on Python 3.2+") |
|
8215aaccc9dd
Skip test_algorithms (known remote hosts need SNI, which is only available on 3.2+)
Antoine Pitrou <solipsis@pitrou.net>
parents:
74661
diff
changeset
|
355 # NOTE: https://sha2.hboeck.de is another possible test host |
|
67469
4d1927091b39
Merged revisions 87861,87863 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65813
diff
changeset
|
356 remote = ("sha256.tbs-internet.com", 443) |
|
60816
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
357 sha256_cert = os.path.join(os.path.dirname(__file__), "sha256.pem") |
|
67469
4d1927091b39
Merged revisions 87861,87863 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65813
diff
changeset
|
358 with test_support.transient_internet("sha256.tbs-internet.com"): |
|
64539
af414b29d467
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64007
diff
changeset
|
359 s = ssl.wrap_socket(socket.socket(socket.AF_INET), |
|
af414b29d467
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64007
diff
changeset
|
360 cert_reqs=ssl.CERT_REQUIRED, |
|
af414b29d467
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64007
diff
changeset
|
361 ca_certs=sha256_cert,) |
|
60816
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
362 try: |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
363 s.connect(remote) |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
364 if test_support.verbose: |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
365 sys.stdout.write("\nCipher with %r is %r\n" % |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
366 (remote, s.cipher())) |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
367 sys.stdout.write("Certificate is:\n%s\n" % |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
368 pprint.pformat(s.getpeercert())) |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
369 finally: |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
370 s.close() |
|
9d86f0701d9c
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49340
diff
changeset
|
371 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
372 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
373 try: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
374 import threading |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
375 except ImportError: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
376 _have_threads = False |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
377 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
378 _have_threads = True |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
379 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
380 class ThreadedEchoServer(threading.Thread): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
381 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
382 class ConnectionHandler(threading.Thread): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
383 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
384 """A mildly complicated class, because we want it to work both |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
385 with and without the SSL wrapper around the socket connection, so |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
386 that we can test the STARTTLS functionality.""" |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
387 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
388 def __init__(self, server, connsock): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
389 self.server = server |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
390 self.running = False |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
391 self.sock = connsock |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
392 self.sock.setblocking(1) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
393 self.sslconn = None |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
394 threading.Thread.__init__(self) |
|
48292
db589241e6f7
fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents:
48222
diff
changeset
|
395 self.daemon = True |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
396 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
397 def show_conn_details(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
398 if self.server.certreqs == ssl.CERT_REQUIRED: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
399 cert = self.sslconn.getpeercert() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
400 if test_support.verbose and self.server.chatty: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
401 sys.stdout.write(" client cert is " + pprint.pformat(cert) + "\n") |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
402 cert_binary = self.sslconn.getpeercert(True) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
403 if test_support.verbose and self.server.chatty: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
404 sys.stdout.write(" cert binary is " + str(len(cert_binary)) + " bytes\n") |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
405 cipher = self.sslconn.cipher() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
406 if test_support.verbose and self.server.chatty: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
407 sys.stdout.write(" server: connection cipher is now " + str(cipher) + "\n") |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
408 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
409 def wrap_conn(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
410 try: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
411 self.sslconn = ssl.wrap_socket(self.sock, server_side=True, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
412 certfile=self.server.certificate, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
413 ssl_version=self.server.protocol, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
414 ca_certs=self.server.cacerts, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
415 cert_reqs=self.server.certreqs, |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
416 ciphers=self.server.ciphers) |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
417 except ssl.SSLError as e: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
418 # XXX Various errors can have happened here, for example |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
419 # a mismatching protocol version, an invalid certificate, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
420 # or a low-level bug. This should be made more discriminating. |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
421 self.server.conn_errors.append(e) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
422 if self.server.chatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
423 handle_error("\n server: bad connection attempt from " + |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
424 str(self.sock.getpeername()) + ":\n") |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
425 self.close() |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
426 self.running = False |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
427 self.server.stop() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
428 return False |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
429 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
430 return True |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
431 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
432 def read(self): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
433 if self.sslconn: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
434 return self.sslconn.read() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
435 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
436 return self.sock.recv(1024) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
437 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
438 def write(self, bytes): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
439 if self.sslconn: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
440 return self.sslconn.write(bytes) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
441 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
442 return self.sock.send(bytes) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
443 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
444 def close(self): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
445 if self.sslconn: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
446 self.sslconn.close() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
447 else: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
448 self.sock._sock.close() |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
449 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
450 def run(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
451 self.running = True |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
452 if not self.server.starttls_server: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
453 if isinstance(self.sock, ssl.SSLSocket): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
454 self.sslconn = self.sock |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
455 elif not self.wrap_conn(): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
456 return |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
457 self.show_conn_details() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
458 while self.running: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
459 try: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
460 msg = self.read() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
461 if not msg: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
462 # eof, so quit this handler |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
463 self.running = False |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
464 self.close() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
465 elif msg.strip() == 'over': |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
466 if test_support.verbose and self.server.connectionchatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
467 sys.stdout.write(" server: client closed connection\n") |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
468 self.close() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
469 return |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
470 elif self.server.starttls_server and msg.strip() == 'STARTTLS': |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
471 if test_support.verbose and self.server.connectionchatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
472 sys.stdout.write(" server: read STARTTLS from client, sending OK...\n") |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
473 self.write("OK\n") |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
474 if not self.wrap_conn(): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
475 return |
|
48222
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
476 elif self.server.starttls_server and self.sslconn and msg.strip() == 'ENDTLS': |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
477 if test_support.verbose and self.server.connectionchatty: |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
478 sys.stdout.write(" server: read ENDTLS from client, sending OK...\n") |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
479 self.write("OK\n") |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
480 self.sslconn.unwrap() |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
481 self.sslconn = None |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
482 if test_support.verbose and self.server.connectionchatty: |
|
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
483 sys.stdout.write(" server: connection is now unencrypted...\n") |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
484 else: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
485 if (test_support.verbose and |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
486 self.server.connectionchatty): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
487 ctype = (self.sslconn and "encrypted") or "unencrypted" |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
488 sys.stdout.write(" server: read %s (%s), sending back %s (%s)...\n" |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
489 % (repr(msg), ctype, repr(msg.lower()), ctype)) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
490 self.write(msg.lower()) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
491 except ssl.SSLError: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
492 if self.server.chatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
493 handle_error("Test server failure:\n") |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
494 self.close() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
495 self.running = False |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
496 # normally, we'd just stop here, but for the test |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
497 # harness, we want to stop the server |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
498 self.server.stop() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
499 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
500 def __init__(self, certificate, ssl_version=None, |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
501 certreqs=None, cacerts=None, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
502 chatty=True, connectionchatty=False, starttls_server=False, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
503 wrap_accepting_socket=False, ciphers=None): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
504 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
505 if ssl_version is None: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
506 ssl_version = ssl.PROTOCOL_TLSv1 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
507 if certreqs is None: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
508 certreqs = ssl.CERT_NONE |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
509 self.certificate = certificate |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
510 self.protocol = ssl_version |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
511 self.certreqs = certreqs |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
512 self.cacerts = cacerts |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
513 self.ciphers = ciphers |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
514 self.chatty = chatty |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
515 self.connectionchatty = connectionchatty |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
516 self.starttls_server = starttls_server |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
517 self.sock = socket.socket() |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
518 self.flag = None |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
519 if wrap_accepting_socket: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
520 self.sock = ssl.wrap_socket(self.sock, server_side=True, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
521 certfile=self.certificate, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
522 cert_reqs = self.certreqs, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
523 ca_certs = self.cacerts, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
524 ssl_version = self.protocol, |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
525 ciphers = self.ciphers) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
526 if test_support.verbose and self.chatty: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
527 sys.stdout.write(' server: wrapped server socket as %s\n' % str(self.sock)) |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
528 self.port = test_support.bind_port(self.sock) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
529 self.active = False |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
530 self.conn_errors = [] |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
531 threading.Thread.__init__(self) |
|
48292
db589241e6f7
fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents:
48222
diff
changeset
|
532 self.daemon = True |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
533 |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
534 def __enter__(self): |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
535 self.start(threading.Event()) |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
536 self.flag.wait() |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
537 return self |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
538 |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
539 def __exit__(self, *args): |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
540 self.stop() |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
541 self.join() |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
542 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
543 def start(self, flag=None): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
544 self.flag = flag |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
545 threading.Thread.start(self) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
546 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
547 def run(self): |
|
61002
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
548 self.sock.settimeout(0.05) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
549 self.sock.listen(5) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
550 self.active = True |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
551 if self.flag: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
552 # signal an event |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
553 self.flag.set() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
554 while self.active: |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
555 try: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
556 newconn, connaddr = self.sock.accept() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
557 if test_support.verbose and self.chatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
558 sys.stdout.write(' server: new connection from ' |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
559 + str(connaddr) + '\n') |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
560 handler = self.ConnectionHandler(self, newconn) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
561 handler.start() |
|
74661
f2360aafc450
Fix intermittent test_ssl failure.
Antoine Pitrou <solipsis@pitrou.net>
parents:
74252
diff
changeset
|
562 handler.join() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
563 except socket.timeout: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
564 pass |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
565 except KeyboardInterrupt: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
566 self.stop() |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
567 self.sock.close() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
568 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
569 def stop(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
570 self.active = False |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
571 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
572 class AsyncoreEchoServer(threading.Thread): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
573 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
574 class EchoServer(asyncore.dispatcher): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
575 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
576 class ConnectionHandler(asyncore.dispatcher_with_send): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
577 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
578 def __init__(self, conn, certfile): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
579 asyncore.dispatcher_with_send.__init__(self, conn) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
580 self.socket = ssl.wrap_socket(conn, server_side=True, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
581 certfile=certfile, |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
582 do_handshake_on_connect=False) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
583 self._ssl_accepting = True |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
584 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
585 def readable(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
586 if isinstance(self.socket, ssl.SSLSocket): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
587 while self.socket.pending() > 0: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
588 self.handle_read_event() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
589 return True |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
590 |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
591 def _do_ssl_handshake(self): |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
592 try: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
593 self.socket.do_handshake() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
594 except ssl.SSLError, err: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
595 if err.args[0] in (ssl.SSL_ERROR_WANT_READ, |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
596 ssl.SSL_ERROR_WANT_WRITE): |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
597 return |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
598 elif err.args[0] == ssl.SSL_ERROR_EOF: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
599 return self.handle_close() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
600 raise |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
601 except socket.error, err: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
602 if err.args[0] == errno.ECONNABORTED: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
603 return self.handle_close() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
604 else: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
605 self._ssl_accepting = False |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
606 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
607 def handle_read(self): |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
608 if self._ssl_accepting: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
609 self._do_ssl_handshake() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
610 else: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
611 data = self.recv(1024) |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
612 if data and data.strip() != 'over': |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
613 self.send(data.lower()) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
614 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
615 def handle_close(self): |
|
47849
0fc7861ece5f
make sure we close the active channels when eof is received on them
Bill Janssen <janssen@parc.com>
parents:
47848
diff
changeset
|
616 self.close() |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
617 if test_support.verbose: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
618 sys.stdout.write(" server: closed connection %s\n" % self.socket) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
619 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
620 def handle_error(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
621 raise |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
622 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
623 def __init__(self, certfile): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
624 self.certfile = certfile |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
625 asyncore.dispatcher.__init__(self) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
626 self.create_socket(socket.AF_INET, socket.SOCK_STREAM) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
627 self.port = test_support.bind_port(self.socket) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
628 self.listen(5) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
629 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
630 def handle_accept(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
631 sock_obj, addr = self.accept() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
632 if test_support.verbose: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
633 sys.stdout.write(" server: new connection from %s:%s\n" %addr) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
634 self.ConnectionHandler(sock_obj, self.certfile) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
635 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
636 def handle_error(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
637 raise |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
638 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
639 def __init__(self, certfile): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
640 self.flag = None |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
641 self.active = False |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
642 self.server = self.EchoServer(certfile) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
643 self.port = self.server.port |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
644 threading.Thread.__init__(self) |
|
48292
db589241e6f7
fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents:
48222
diff
changeset
|
645 self.daemon = True |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
646 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
647 def __str__(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
648 return "<%s %s>" % (self.__class__.__name__, self.server) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
649 |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
650 def __enter__(self): |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
651 self.start(threading.Event()) |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
652 self.flag.wait() |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
653 return self |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
654 |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
655 def __exit__(self, *args): |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
656 if test_support.verbose: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
657 sys.stdout.write(" cleanup: stopping server.\n") |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
658 self.stop() |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
659 if test_support.verbose: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
660 sys.stdout.write(" cleanup: joining server thread.\n") |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
661 self.join() |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
662 if test_support.verbose: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
663 sys.stdout.write(" cleanup: successfully joined.\n") |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
664 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
665 def start(self, flag=None): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
666 self.flag = flag |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
667 threading.Thread.start(self) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
668 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
669 def run(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
670 self.active = True |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
671 if self.flag: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
672 self.flag.set() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
673 while self.active: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
674 asyncore.loop(0.05) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
675 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
676 def stop(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
677 self.active = False |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
678 self.server.close() |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
679 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
680 class SocketServerHTTPSServer(threading.Thread): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
681 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
682 class HTTPSServer(HTTPServer): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
683 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
684 def __init__(self, server_address, RequestHandlerClass, certfile): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
685 HTTPServer.__init__(self, server_address, RequestHandlerClass) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
686 # we assume the certfile contains both private key and certificate |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
687 self.certfile = certfile |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
688 self.allow_reuse_address = True |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
689 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
690 def __str__(self): |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
691 return ('<%s %s:%s>' % |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
692 (self.__class__.__name__, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
693 self.server_name, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
694 self.server_port)) |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
695 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
696 def get_request(self): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
697 # override this to wrap socket with SSL |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
698 sock, addr = self.socket.accept() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
699 sslconn = ssl.wrap_socket(sock, server_side=True, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
700 certfile=self.certfile) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
701 return sslconn, addr |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
702 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
703 class RootedHTTPRequestHandler(SimpleHTTPRequestHandler): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
704 # need to override translate_path to get a known root, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
705 # instead of using os.curdir, since the test could be |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
706 # run from anywhere |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
707 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
708 server_version = "TestHTTPS/1.0" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
709 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
710 root = None |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
711 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
712 def translate_path(self, path): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
713 """Translate a /-separated PATH to the local filename syntax. |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
714 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
715 Components that mean special things to the local file system |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
716 (e.g. drive or directory names) are ignored. (XXX They should |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
717 probably be diagnosed.) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
718 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
719 """ |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
720 # abandon query parameters |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
721 path = urlparse.urlparse(path)[2] |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
722 path = os.path.normpath(urllib.unquote(path)) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
723 words = path.split('/') |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
724 words = filter(None, words) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
725 path = self.root |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
726 for word in words: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
727 drive, word = os.path.splitdrive(word) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
728 head, word = os.path.split(word) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
729 if word in self.root: continue |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
730 path = os.path.join(path, word) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
731 return path |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
732 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
733 def log_message(self, format, *args): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
734 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
735 # we override this to suppress logging unless "verbose" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
736 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
737 if test_support.verbose: |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
738 sys.stdout.write(" server (%s:%d %s):\n [%s] %s\n" % |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
739 (self.server.server_address, |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
740 self.server.server_port, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
741 self.request.cipher(), |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
742 self.log_date_time_string(), |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
743 format%args)) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
744 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
745 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
746 def __init__(self, certfile): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
747 self.flag = None |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
748 self.RootedHTTPRequestHandler.root = os.path.split(CERTFILE)[0] |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
749 self.server = self.HTTPSServer( |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
750 (HOST, 0), self.RootedHTTPRequestHandler, certfile) |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
751 self.port = self.server.server_port |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
752 threading.Thread.__init__(self) |
|
48292
db589241e6f7
fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents:
48222
diff
changeset
|
753 self.daemon = True |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
754 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
755 def __str__(self): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
756 return "<%s %s>" % (self.__class__.__name__, self.server) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
757 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
758 def start(self, flag=None): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
759 self.flag = flag |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
760 threading.Thread.start(self) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
761 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
762 def run(self): |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
763 if self.flag: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
764 self.flag.set() |
|
61002
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
765 self.server.serve_forever(0.05) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
766 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
767 def stop(self): |
|
61002
6da9eafb1daa
Merged revisions 80526 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60998
diff
changeset
|
768 self.server.shutdown() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
769 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
770 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
771 def bad_cert_test(certfile): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
772 """ |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
773 Launch a server with CERT_REQUIRED, and check that trying to |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
774 connect to it with the given client certificate fails. |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
775 """ |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
776 server = ThreadedEchoServer(CERTFILE, |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
777 certreqs=ssl.CERT_REQUIRED, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
778 cacerts=CERTFILE, chatty=False) |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
779 with server: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
780 try: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
781 s = ssl.wrap_socket(socket.socket(), |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
782 certfile=certfile, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
783 ssl_version=ssl.PROTOCOL_TLSv1) |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
784 s.connect((HOST, server.port)) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
785 except ssl.SSLError, x: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
786 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
787 sys.stdout.write("\nSSLError is %s\n" % x[1]) |
|
61010
969ef5eb80c4
Merged revisions 80534 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61006
diff
changeset
|
788 except socket.error, x: |
|
969ef5eb80c4
Merged revisions 80534 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61006
diff
changeset
|
789 if test_support.verbose: |
|
969ef5eb80c4
Merged revisions 80534 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61006
diff
changeset
|
790 sys.stdout.write("\nsocket.error is %s\n" % x[1]) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
791 else: |
|
61318
b4b322b2e98b
`self` doesn't exist here
Antoine Pitrou <solipsis@pitrou.net>
parents:
61150
diff
changeset
|
792 raise AssertionError("Use of invalid cert should have failed!") |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
793 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
794 def server_params_test(certfile, protocol, certreqs, cacertsfile, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
795 client_certfile, client_protocol=None, indata="FOO\n", |
|
61069
807fcac4f17b
Fix style issues in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
796 ciphers=None, chatty=True, connectionchatty=False, |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
797 wrap_accepting_socket=False): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
798 """ |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
799 Launch a server, connect a client to it and try various reads |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
800 and writes. |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
801 """ |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
802 server = ThreadedEchoServer(certfile, |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
803 certreqs=certreqs, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
804 ssl_version=protocol, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
805 cacerts=cacertsfile, |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
806 ciphers=ciphers, |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
807 chatty=chatty, |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
808 connectionchatty=connectionchatty, |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
809 wrap_accepting_socket=wrap_accepting_socket) |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
810 with server: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
811 # try to connect |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
812 if client_protocol is None: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
813 client_protocol = protocol |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
814 s = ssl.wrap_socket(socket.socket(), |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
815 certfile=client_certfile, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
816 ca_certs=cacertsfile, |
|
61004
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
817 ciphers=ciphers, |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
818 cert_reqs=certreqs, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
819 ssl_version=client_protocol) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
820 s.connect((HOST, server.port)) |
|
61004
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
821 for arg in [indata, bytearray(indata), memoryview(indata)]: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
822 if connectionchatty: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
823 if test_support.verbose: |
|
61004
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
824 sys.stdout.write( |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
825 " client: sending %s...\n" % (repr(arg))) |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
826 s.write(arg) |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
827 outdata = s.read() |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
828 if connectionchatty: |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
829 if test_support.verbose: |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
830 sys.stdout.write(" client: read %s\n" % repr(outdata)) |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
831 if outdata != indata.lower(): |
|
61318
b4b322b2e98b
`self` doesn't exist here
Antoine Pitrou <solipsis@pitrou.net>
parents:
61150
diff
changeset
|
832 raise AssertionError( |
|
61004
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
833 "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n" |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
834 % (outdata[:min(len(outdata),20)], len(outdata), |
|
d447c60fb4d8
Qualify or remove or bare excepts. Simplify exception handling in places.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61001
diff
changeset
|
835 indata[:min(len(indata),20)].lower(), len(indata))) |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
836 s.write("over\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
837 if connectionchatty: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
838 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
839 sys.stdout.write(" client: closing connection.\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
840 s.close() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
841 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
842 def try_protocol_combo(server_protocol, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
843 client_protocol, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
844 expect_success, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
845 certsreqs=None): |
|
46197
01a7e66525c2
#2503 make singletons compared with "is" not == or !=
Benjamin Peterson <benjamin@python.org>
parents:
45722
diff
changeset
|
846 if certsreqs is None: |
|
43329
b3a4a14d8ac3
Make sure test_ssl doesn't reference the ssl module in a
Bill Janssen <janssen@parc.com>
parents:
43328
diff
changeset
|
847 certsreqs = ssl.CERT_NONE |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
848 certtype = { |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
849 ssl.CERT_NONE: "CERT_NONE", |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
850 ssl.CERT_OPTIONAL: "CERT_OPTIONAL", |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
851 ssl.CERT_REQUIRED: "CERT_REQUIRED", |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
852 }[certsreqs] |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
853 if test_support.verbose: |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
854 formatstr = (expect_success and " %s->%s %s\n") or " {%s->%s} %s\n" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
855 sys.stdout.write(formatstr % |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
856 (ssl.get_protocol_name(client_protocol), |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
857 ssl.get_protocol_name(server_protocol), |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
858 certtype)) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
859 try: |
|
60659
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
860 # NOTE: we must enable "ALL" ciphers, otherwise an SSLv23 client |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
861 # will send an SSLv3 hello (rather than SSLv2) starting from |
|
7462e752f0fa
Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
Antoine Pitrou <solipsis@pitrou.net>
parents:
60372
diff
changeset
|
862 # OpenSSL 1.0.0 (see issue #8322). |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
863 server_params_test(CERTFILE, server_protocol, certsreqs, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
864 CERTFILE, CERTFILE, client_protocol, |
|
61069
807fcac4f17b
Fix style issues in test_ssl
Antoine Pitrou <solipsis@pitrou.net>
parents:
61032
diff
changeset
|
865 ciphers="ALL", chatty=False) |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
866 # Protocol mismatch can result in either an SSLError, or a |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
867 # "Connection reset by peer" error. |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
868 except ssl.SSLError: |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
869 if expect_success: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
870 raise |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
871 except socket.error as e: |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
872 if expect_success or e.errno != errno.ECONNRESET: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
873 raise |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
874 else: |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
875 if not expect_success: |
|
61316
ea7001c3f000
Issue #8629: Disable some test_ssl tests, since they give different
Antoine Pitrou <solipsis@pitrou.net>
parents:
61151
diff
changeset
|
876 raise AssertionError( |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
877 "Client protocol %s succeeded with server protocol %s!" |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
878 % (ssl.get_protocol_name(client_protocol), |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
879 ssl.get_protocol_name(server_protocol))) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
880 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
881 |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
882 class ThreadedTests(unittest.TestCase): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
883 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
884 def test_rude_shutdown(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
885 """A brutal shutdown of an SSL server should raise an IOError |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
886 in the client when attempting handshake. |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
887 """ |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
888 listener_ready = threading.Event() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
889 listener_gone = threading.Event() |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
890 |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
891 s = socket.socket() |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
892 port = test_support.bind_port(s, HOST) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
893 |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
894 # `listener` runs in a thread. It sits in an accept() until |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
895 # the main thread connects. Then it rudely closes the socket, |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
896 # and sets Event `listener_gone` to let the main thread know |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
897 # the socket is gone. |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
898 def listener(): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
899 s.listen(5) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
900 listener_ready.set() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
901 s.accept() |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
902 s.close() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
903 listener_gone.set() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
904 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
905 def connector(): |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
906 listener_ready.wait() |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
907 c = socket.socket() |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
908 c.connect((HOST, port)) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
909 listener_gone.wait() |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
910 try: |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
911 ssl_sock = ssl.wrap_socket(c) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
912 except IOError: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
913 pass |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
914 else: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
915 self.fail('connecting to closed SSL socket should have failed') |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
916 |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
917 t = threading.Thread(target=listener) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
918 t.start() |
|
60998
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
919 try: |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
920 connector() |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
921 finally: |
|
c07d2e5acf65
Merged revisions 80522 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60934
diff
changeset
|
922 t.join() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
923 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
924 @skip_if_broken_ubuntu_ssl |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
925 def test_echo(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
926 """Basic test of an SSL client connecting to a server""" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
927 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
928 sys.stdout.write("\n") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
929 server_params_test(CERTFILE, ssl.PROTOCOL_TLSv1, ssl.CERT_NONE, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
930 CERTFILE, CERTFILE, ssl.PROTOCOL_TLSv1, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
931 chatty=True, connectionchatty=True) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
932 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
933 def test_getpeercert(self): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
934 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
935 sys.stdout.write("\n") |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
936 s2 = socket.socket() |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
937 server = ThreadedEchoServer(CERTFILE, |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
938 certreqs=ssl.CERT_NONE, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
939 ssl_version=ssl.PROTOCOL_SSLv23, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
940 cacerts=CERTFILE, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
941 chatty=False) |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
942 with server: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
943 s = ssl.wrap_socket(socket.socket(), |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
944 certfile=CERTFILE, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
945 ca_certs=CERTFILE, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
946 cert_reqs=ssl.CERT_REQUIRED, |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
947 ssl_version=ssl.PROTOCOL_SSLv23) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
948 s.connect((HOST, server.port)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
949 cert = s.getpeercert() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
950 self.assertTrue(cert, "Can't get peer certificate.") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
951 cipher = s.cipher() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
952 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
953 sys.stdout.write(pprint.pformat(cert) + '\n') |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
954 sys.stdout.write("Connection cipher is " + str(cipher) + '.\n') |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
955 if 'subject' not in cert: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
956 self.fail("No subject field in certificate: %s." % |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
957 pprint.pformat(cert)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
958 if ((('organizationName', 'Python Software Foundation'),) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
959 not in cert['subject']): |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
960 self.fail( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
961 "Missing or invalid 'organizationName' field in certificate subject; " |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
962 "should be 'Python Software Foundation'.") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
963 s.close() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
964 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
965 def test_empty_cert(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
966 """Connecting with an empty cert file""" |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
967 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
968 "nullcert.pem")) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
969 def test_malformed_cert(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
970 """Connecting with a badly formatted certificate (syntax error)""" |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
971 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
972 "badcert.pem")) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
973 def test_nonexisting_cert(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
974 """Connecting with a non-existing cert file""" |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
975 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
976 "wrongcert.pem")) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
977 def test_malformed_key(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
978 """Connecting with a badly formatted key (syntax error)""" |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
979 bad_cert_test(os.path.join(os.path.dirname(__file__) or os.curdir, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
980 "badkey.pem")) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
981 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
982 @skip_if_broken_ubuntu_ssl |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
983 def test_protocol_sslv2(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
984 """Connecting to an SSLv2 server with various client options""" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
985 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
986 sys.stdout.write("\n") |
|
73220
5a080ebd311c
Remove unstable SSL tests in the absence of ssl.OP_NO_{SSLv2,SSLv3,TLSv1}
Antoine Pitrou <solipsis@pitrou.net>
parents:
73175
diff
changeset
|
987 if not hasattr(ssl, 'PROTOCOL_SSLv2'): |
|
5a080ebd311c
Remove unstable SSL tests in the absence of ssl.OP_NO_{SSLv2,SSLv3,TLSv1}
Antoine Pitrou <solipsis@pitrou.net>
parents:
73175
diff
changeset
|
988 self.skipTest("PROTOCOL_SSLv2 needed") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
989 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
990 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_OPTIONAL) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
991 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_REQUIRED) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
992 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
993 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, False) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
994 try_protocol_combo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLSv1, False) |
|
42874
85eaecf9d678
Another patch from Bill Janssen that:
Neal Norwitz <nnorwitz@gmail.com>
parents:
42870
diff
changeset
|
995 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
996 @skip_if_broken_ubuntu_ssl |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
997 def test_protocol_sslv23(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
998 """Connecting to an SSLv23 server with various client options""" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
999 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1000 sys.stdout.write("\n") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1001 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1002 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1003 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1004 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1005 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1006 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_OPTIONAL) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1007 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1008 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1009 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1010 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_REQUIRED) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1011 try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1012 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
1013 @skip_if_broken_ubuntu_ssl |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1014 def test_protocol_sslv3(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1015 """Connecting to an SSLv3 server with various client options""" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1016 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1017 sys.stdout.write("\n") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1018 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1019 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1020 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED) |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
1021 if hasattr(ssl, 'PROTOCOL_SSLv2'): |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
1022 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv2, False) |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1023 try_protocol_combo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLSv1, False) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1024 |
|
63742
35fee9211f3b
Merged revisions 83727 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61318
diff
changeset
|
1025 @skip_if_broken_ubuntu_ssl |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1026 def test_protocol_tlsv1(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1027 """Connecting to a TLSv1 server with various client options""" |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1028 if test_support.verbose: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1029 sys.stdout.write("\n") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1030 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1031 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1032 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED) |
|
70001
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
1033 if hasattr(ssl, 'PROTOCOL_SSLv2'): |
|
3c87a13980be
(Merge 3.1) Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68256
diff
changeset
|
1034 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, False) |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1035 try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1036 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1037 def test_starttls(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1038 """Switching from clear text to encrypted and back again.""" |
|
48222
79fa3e0c0988
remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents:
48002
diff
changeset
|
1039 msgs = ("msg 1", "MSG 2", "STARTTLS", "MSG 3", "msg 4", "ENDTLS", "msg 5", "msg 6") |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1040 |
|
46362
d917da2b1946
- Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents:
46252
diff
changeset
|
1041 server = ThreadedEchoServer(CERTFILE, |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1042 ssl_version=ssl.PROTOCOL_TLSv1, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1043 starttls_server=True, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1044 chatty=True, |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1045 connectionchatty=True) |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1046 wrapped = False |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1047 with server: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1048 s = socket.socket() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1049 s.setblocking(1) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1050 s.connect((HOST, server.port)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1051 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1052 sys.stdout.write("\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1053 for indata in msgs: |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1054 if test_support.verbose: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1055 sys.stdout.write( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1056 " client: sending %s...\n" % repr(indata)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1057 if wrapped: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1058 conn.write(indata) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1059 outdata = conn.read() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1060 else: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1061 s.send(indata) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1062 outdata = s.recv(1024) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1063 if (indata == "STARTTLS" and |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1064 outdata.strip().lower().startswith("ok")): |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1065 # STARTTLS ok, switch to secure mode |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1066 if test_support.verbose: |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1067 sys.stdout.write( |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1068 " client: read %s from server, starting TLS...\n" |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1069 % repr(outdata)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1070 conn = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1071 wrapped = True |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1072 elif (indata == "ENDTLS" and |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1073 outdata.strip().lower().startswith("ok")): |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1074 # ENDTLS ok, switch back to clear text |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1075 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1076 sys.stdout.write( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1077 " client: read %s from server, ending TLS...\n" |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1078 % repr(outdata)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1079 s = conn.unwrap() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1080 wrapped = False |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1081 else: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1082 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1083 sys.stdout.write( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1084 " client: read %s from server\n" % repr(outdata)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1085 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1086 sys.stdout.write(" client: closing connection.\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1087 if wrapped: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1088 conn.write("over\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1089 else: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1090 s.send("over\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1091 s.close() |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1092 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1093 def test_socketserver(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1094 """Using a SocketServer to create and manage SSL connections.""" |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1095 server = SocketServerHTTPSServer(CERTFILE) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1096 flag = threading.Event() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1097 server.start(flag) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1098 # wait for it to start |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1099 flag.wait() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1100 # try to connect |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1101 try: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1102 if test_support.verbose: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1103 sys.stdout.write('\n') |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1104 with open(CERTFILE, 'rb') as f: |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1105 d1 = f.read() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1106 d2 = '' |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1107 # now fetch the same data from the HTTPS server |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1108 url = 'https://127.0.0.1:%d/%s' % ( |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1109 server.port, os.path.split(CERTFILE)[1]) |
|
59783
c8c840162804
#7092 - Silence more py3k deprecation warnings, using test_support.check_py3k_warnings() helper.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58817
diff
changeset
|
1110 with test_support.check_py3k_warnings(): |
|
63572
51102abdec50
Merged revisions 79165 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
61316
diff
changeset
|
1111 f = urllib.urlopen(url) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1112 dlen = f.info().getheader("content-length") |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1113 if dlen and (int(dlen) > 0): |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1114 d2 = f.read(int(dlen)) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1115 if test_support.verbose: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1116 sys.stdout.write( |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1117 " client: read %d bytes from remote server '%s'\n" |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1118 % (len(d2), server)) |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1119 f.close() |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1120 self.assertEqual(d1, d2) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1121 finally: |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1122 server.stop() |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1123 server.join() |
|
42866
d6d493b617e3
Fail gracefully if the cert files cannot be created
Neal Norwitz <nnorwitz@gmail.com>
parents:
42837
diff
changeset
|
1124 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1125 def test_wrapped_accept(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1126 """Check the accept() method on SSL sockets.""" |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1127 if test_support.verbose: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1128 sys.stdout.write("\n") |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1129 server_params_test(CERTFILE, ssl.PROTOCOL_SSLv23, ssl.CERT_REQUIRED, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1130 CERTFILE, CERTFILE, ssl.PROTOCOL_SSLv23, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1131 chatty=True, connectionchatty=True, |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1132 wrap_accepting_socket=True) |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1133 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1134 def test_asyncore_server(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1135 """Check the example asyncore integration.""" |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1136 indata = "TEST MESSAGE of mixed case\n" |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1137 |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1138 if test_support.verbose: |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1139 sys.stdout.write("\n") |
|
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1140 server = AsyncoreEchoServer(CERTFILE) |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1141 with server: |
|
61006
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1142 s = ssl.wrap_socket(socket.socket()) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1143 s.connect(('127.0.0.1', server.port)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1144 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1145 sys.stdout.write( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1146 " client: sending %s...\n" % (repr(indata))) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1147 s.write(indata) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1148 outdata = s.read() |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1149 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1150 sys.stdout.write(" client: read %s\n" % repr(outdata)) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1151 if outdata != indata.lower(): |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1152 self.fail( |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1153 "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n" |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1154 % (outdata[:min(len(outdata),20)], len(outdata), |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1155 indata[:min(len(indata),20)].lower(), len(indata))) |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1156 s.write("over\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1157 if test_support.verbose: |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1158 sys.stdout.write(" client: closing connection.\n") |
|
ffe99f522d86
Merged revisions 80529 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61002
diff
changeset
|
1159 s.close() |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1160 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1161 def test_recv_send(self): |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1162 """Test recv(), send() and friends.""" |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1163 if test_support.verbose: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1164 sys.stdout.write("\n") |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1165 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1166 server = ThreadedEchoServer(CERTFILE, |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1167 certreqs=ssl.CERT_NONE, |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1168 ssl_version=ssl.PROTOCOL_TLSv1, |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1169 cacerts=CERTFILE, |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1170 chatty=True, |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1171 connectionchatty=False) |
|
74117
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1172 with server: |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1173 s = ssl.wrap_socket(socket.socket(), |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1174 server_side=False, |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1175 certfile=CERTFILE, |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1176 ca_certs=CERTFILE, |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1177 cert_reqs=ssl.CERT_NONE, |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1178 ssl_version=ssl.PROTOCOL_TLSv1) |
|
d868208b831d
Use context managers in test_ssl to simplify test writing.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73263
diff
changeset
|
1179 s.connect((HOST, server.port)) |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1180 # helper methods for standardising recv* method signatures |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1181 def _recv_into(): |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1182 b = bytearray("\0"*100) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1183 count = s.recv_into(b) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1184 return b[:count] |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1185 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1186 def _recvfrom_into(): |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1187 b = bytearray("\0"*100) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1188 count, addr = s.recvfrom_into(b) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1189 return b[:count] |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1190 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1191 # (name, method, whether to expect success, *args) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1192 send_methods = [ |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1193 ('send', s.send, True, []), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1194 ('sendto', s.sendto, False, ["some.address"]), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1195 ('sendall', s.sendall, True, []), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1196 ] |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1197 recv_methods = [ |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1198 ('recv', s.recv, True, []), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1199 ('recvfrom', s.recvfrom, False, ["some.address"]), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1200 ('recv_into', _recv_into, True, []), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1201 ('recvfrom_into', _recvfrom_into, False, []), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1202 ] |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1203 data_prefix = u"PREFIX_" |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1204 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1205 for meth_name, send_meth, expect_success, args in send_methods: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1206 indata = data_prefix + meth_name |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1207 try: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1208 send_meth(indata.encode('ASCII', 'strict'), *args) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1209 outdata = s.read() |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1210 outdata = outdata.decode('ASCII', 'strict') |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1211 if outdata != indata.lower(): |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1212 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1213 "While sending with <<%s>> bad data " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1214 "<<%r>> (%d) received; " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1215 "expected <<%r>> (%d)\n" % ( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1216 meth_name, outdata[:20], len(outdata), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1217 indata[:20], len(indata) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1218 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1219 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1220 except ValueError as e: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1221 if expect_success: |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1222 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1223 "Failed to send with method <<%s>>; " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1224 "expected to succeed.\n" % (meth_name,) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1225 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1226 if not str(e).startswith(meth_name): |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1227 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1228 "Method <<%s>> failed with unexpected " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1229 "exception message: %s\n" % ( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1230 meth_name, e |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1231 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1232 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1233 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1234 for meth_name, recv_meth, expect_success, args in recv_methods: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1235 indata = data_prefix + meth_name |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1236 try: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1237 s.send(indata.encode('ASCII', 'strict')) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1238 outdata = recv_meth(*args) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1239 outdata = outdata.decode('ASCII', 'strict') |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1240 if outdata != indata.lower(): |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1241 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1242 "While receiving with <<%s>> bad data " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1243 "<<%r>> (%d) received; " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1244 "expected <<%r>> (%d)\n" % ( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1245 meth_name, outdata[:20], len(outdata), |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1246 indata[:20], len(indata) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1247 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1248 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1249 except ValueError as e: |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1250 if expect_success: |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1251 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1252 "Failed to receive with method <<%s>>; " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1253 "expected to succeed.\n" % (meth_name,) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1254 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1255 if not str(e).startswith(meth_name): |
|
58772
21a471c344e3
We heard you like test failures so we put unbound locals in your test so that you can fail while you fail.
Georg Brandl <georg@python.org>
parents:
58198
diff
changeset
|
1256 self.fail( |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1257 "Method <<%s>> failed with unexpected " |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1258 "exception message: %s\n" % ( |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1259 meth_name, e |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1260 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1261 ) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1262 # consume data |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1263 s.read() |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1264 |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1265 s.write("over\n".encode("ASCII", "strict")) |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1266 s.close() |
|
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1267 |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1268 def test_handshake_timeout(self): |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1269 # Issue #5103: SSL handshake must respect the socket timeout |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1270 server = socket.socket(socket.AF_INET) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1271 host = "127.0.0.1" |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1272 port = test_support.bind_port(server) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1273 started = threading.Event() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1274 finish = False |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1275 |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1276 def serve(): |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1277 server.listen(5) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1278 started.set() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1279 conns = [] |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1280 while not finish: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1281 r, w, e = select.select([server], [], [], 0.1) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1282 if server in r: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1283 # Let the socket hang around rather than having |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1284 # it closed by garbage collection. |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1285 conns.append(server.accept()[0]) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1286 |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1287 t = threading.Thread(target=serve) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1288 t.start() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1289 started.wait() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1290 |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1291 try: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1292 try: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1293 c = socket.socket(socket.AF_INET) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1294 c.settimeout(0.2) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1295 c.connect((host, port)) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1296 # Will attempt handshake and time out |
|
60933
76a052eedee6
Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents:
60915
diff
changeset
|
1297 self.assertRaisesRegexp(ssl.SSLError, "timed out", |
|
76a052eedee6
Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents:
60915
diff
changeset
|
1298 ssl.wrap_socket, c) |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1299 finally: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1300 c.close() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1301 try: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1302 c = socket.socket(socket.AF_INET) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1303 c.settimeout(0.2) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1304 c = ssl.wrap_socket(c) |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1305 # Will attempt handshake and time out |
|
60933
76a052eedee6
Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents:
60915
diff
changeset
|
1306 self.assertRaisesRegexp(ssl.SSLError, "timed out", |
|
76a052eedee6
Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents:
60915
diff
changeset
|
1307 c.connect, (host, port)) |
|
60934
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1308 finally: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1309 c.close() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1310 finally: |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1311 finish = True |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1312 t.join() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1313 server.close() |
|
ce4916ca06dd
Merged revisions 80451-80452 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60916
diff
changeset
|
1314 |
|
74252
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1315 def test_default_ciphers(self): |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1316 with ThreadedEchoServer(CERTFILE, |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1317 ssl_version=ssl.PROTOCOL_SSLv23, |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1318 chatty=False) as server: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1319 sock = socket.socket() |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1320 try: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1321 # Force a set of weak ciphers on our client socket |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1322 try: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1323 s = ssl.wrap_socket(sock, |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1324 ssl_version=ssl.PROTOCOL_SSLv23, |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1325 ciphers="DES") |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1326 except ssl.SSLError: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1327 self.skipTest("no DES cipher available") |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1328 with self.assertRaises((OSError, ssl.SSLError)): |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1329 s.connect((HOST, server.port)) |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1330 finally: |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1331 sock.close() |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1332 self.assertIn("no shared cipher", str(server.conn_errors[0])) |
|
f9122975fd80
Issue #13636: Weak ciphers are now disabled by default in the ssl module
Antoine Pitrou <solipsis@pitrou.net>
parents:
74117
diff
changeset
|
1333 |
|
49089
37b70cd4a0f0
incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents:
48292
diff
changeset
|
1334 |
|
42885
bb62492b584e
If we can't create a certificate, print a warning, but don't fail the test.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42884
diff
changeset
|
1335 def test_main(verbose=False): |
|
72569
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
1336 global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT, NOKIACERT |
|
42901
c09c3264a900
> Regardless, building a fixed test certificate and checking it in sounds like
Guido van Rossum <guido@python.org>
parents:
42885
diff
changeset
|
1337 CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1338 "keycert.pem") |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1339 SVN_PYTHON_ORG_ROOT_CERT = os.path.join( |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1340 os.path.dirname(__file__) or os.curdir, |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1341 "https_svn_python_org_root.pem") |
|
72569
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
1342 NOKIACERT = os.path.join(os.path.dirname(__file__) or os.curdir, |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
1343 "nokia.pem") |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1344 |
|
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1345 if (not os.path.exists(CERTFILE) or |
|
72569
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
1346 not os.path.exists(SVN_PYTHON_ORG_ROOT_CERT) or |
|
8e6694387c98
Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported.
Antoine Pitrou <solipsis@pitrou.net>
parents:
70270
diff
changeset
|
1347 not os.path.exists(NOKIACERT)): |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1348 raise test_support.TestFailed("Can't read certificate files!") |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1349 |
|
64734
2d8e40859351
Some tests didn't get executed (because of the merge in r83728)
Antoine Pitrou <solipsis@pitrou.net>
parents:
64587
diff
changeset
|
1350 tests = [BasicTests, BasicSocketTests] |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1351 |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1352 if test_support.is_resource_enabled('network'): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1353 tests.append(NetworkedTests) |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1354 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1355 if _have_threads: |
|
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43243
diff
changeset
|
1356 thread_info = test_support.threading_setup() |
|
43375
9041965a92f2
Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents:
43329
diff
changeset
|
1357 if thread_info and test_support.is_resource_enabled('network'): |
|
47848
8a281bfc058d
various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents:
46362
diff
changeset
|
1358 tests.append(ThreadedTests) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1359 |
|
61070
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1360 try: |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1361 test_support.run_unittest(*tests) |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1362 finally: |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1363 if _have_threads: |
|
ea83a61f6430
Merged revisions 80596 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61033
diff
changeset
|
1364 test_support.threading_cleanup(*thread_info) |
|
42828
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1365 |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1366 if __name__ == "__main__": |
|
08b6278aa1f4
Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1367 test_main() |
