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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()