annotate Lib/test/test_ssl.py @ 58925:eecf1bef052d 2.6

Merged revisions 78207 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r78207 | ezio.melotti | 2010-02-17 01:26:09 +0200 (Wed, 17 Feb 2010) | 1 line #7930: fix stripid ........
author Ezio Melotti <ezio.melotti@gmail.com>
date Tue, 16 Feb 2010 23:29:44 +0000
parents 40536ddc26a1
children 9d86f0701d9c e6009b9cd908
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 errno
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import subprocess
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 import time
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 import os
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 shutil
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 import traceback
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
18 from BaseHTTPServer import HTTPServer
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
19 from SimpleHTTPServer import SimpleHTTPRequestHandler
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
20
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # Optionally test SSL support, if we have it in the tested platform
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 skip_expected = False
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 try:
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 import ssl
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 except ImportError:
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 skip_expected = True
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
28 HOST = test_support.HOST
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 CERTFILE = None
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
30 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
31
42884
8e12d56dd603 Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents: 42883
diff changeset
32 def handle_error(prefix):
8e12d56dd603 Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents: 42883
diff changeset
33 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
34 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
35 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
36
49340
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
37 def testSimpleSSLwrap(self):
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
38 try:
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
39 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
40 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
41 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
42 pass
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
43 else:
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
44 raise
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
45 try:
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
46 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
47 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
48 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
49 pass
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
50 else:
40536ddc26a1 fix for release blocker 3910, 2.6 regression in socket.ssl method
Bill Janssen <janssen@parc.com>
parents: 49089
diff changeset
51 raise
42884
8e12d56dd603 Make a utility function for handling (printing) an error
Neal Norwitz <nnorwitz@gmail.com>
parents: 42883
diff changeset
52
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 class BasicTests(unittest.TestCase):
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 def testSSLconnect(self):
44770
859bf85a556a Disabled test_xmlrpc:test_404. It's causing lots of false alarms.
Christian Heimes <christian@cheimes.de>
parents: 43376
diff changeset
56 if not test_support.is_resource_enabled('network'):
859bf85a556a Disabled test_xmlrpc:test_404. It's causing lots of false alarms.
Christian Heimes <christian@cheimes.de>
parents: 43376
diff changeset
57 return
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
58 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
59 cert_reqs=ssl.CERT_NONE)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
60 s.connect(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
61 c = s.getpeercert()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
62 if c:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
63 raise test_support.TestFailed("Peer cert %s shouldn't be here!")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
64 s.close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
65
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
66 # this should fail because we have no verification certs
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
67 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
68 cert_reqs=ssl.CERT_REQUIRED)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
69 try:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
70 s.connect(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
71 except ssl.SSLError:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
72 pass
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
73 finally:
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 s.close()
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
75
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
76 def testCrucialConstants(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
77 ssl.PROTOCOL_SSLv2
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
78 ssl.PROTOCOL_SSLv23
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
79 ssl.PROTOCOL_SSLv3
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
80 ssl.PROTOCOL_TLSv1
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
81 ssl.CERT_NONE
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
82 ssl.CERT_OPTIONAL
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
83 ssl.CERT_REQUIRED
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
84
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
85 def testRAND(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
86 v = ssl.RAND_status()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
87 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
88 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
89 % (v, (v and "sufficient randomness") or
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
90 "insufficient randomness"))
42868
bab75e4c647f Bill Janssen wrote:
Guido van Rossum <guido@python.org>
parents: 42866
diff changeset
91 try:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
92 ssl.RAND_egd(1)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
93 except TypeError:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
94 pass
42868
bab75e4c647f Bill Janssen wrote:
Guido van Rossum <guido@python.org>
parents: 42866
diff changeset
95 else:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
96 print "didn't raise TypeError"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
97 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
98
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
99 def testParseCert(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
100 # 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
101 # provided solely for this test, to exercise the certificate
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
102 # parsing code
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
103 p = ssl._ssl._test_decode_cert(CERTFILE, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
104 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
105 sys.stdout.write("\n" + pprint.pformat(p) + "\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
106
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
107 def testDERtoPEM(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
108
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
109 pem = open(SVN_PYTHON_ORG_ROOT_CERT, 'r').read()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
110 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
111 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
112 d2 = ssl.PEM_cert_to_DER_cert(p2)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
113 if (d1 != d2):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
114 raise test_support.TestFailed("PEM-to-DER or DER-to-PEM translation failed")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
115
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
116 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
117
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
118 def testConnect(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
119 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
120 cert_reqs=ssl.CERT_NONE)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
121 s.connect(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
122 c = s.getpeercert()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
123 if c:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
124 raise test_support.TestFailed("Peer cert %s shouldn't be here!")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
125 s.close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
126
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
127 # this should fail because we have no verification certs
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
128 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
129 cert_reqs=ssl.CERT_REQUIRED)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
130 try:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
131 s.connect(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
132 except ssl.SSLError:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
133 pass
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
134 finally:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
135 s.close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
136
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
137 # this should succeed because we specify the root cert
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
138 s = ssl.wrap_socket(socket.socket(socket.AF_INET),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
139 cert_reqs=ssl.CERT_REQUIRED,
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
140 ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
141 try:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
142 s.connect(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
143 except ssl.SSLError, x:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
144 raise test_support.TestFailed("Unexpected exception %s" % x)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
145 finally:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
146 s.close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
147
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
148
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
149 def testNonBlockingHandshake(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
150 s = socket.socket(socket.AF_INET)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
151 s.connect(("svn.python.org", 443))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
152 s.setblocking(False)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
153 s = ssl.wrap_socket(s,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
154 cert_reqs=ssl.CERT_NONE,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
155 do_handshake_on_connect=False)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
156 count = 0
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
157 while True:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
158 try:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
159 count += 1
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
160 s.do_handshake()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
161 break
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
162 except ssl.SSLError, err:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
163 if err.args[0] == ssl.SSL_ERROR_WANT_READ:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
164 select.select([s], [], [])
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
165 elif err.args[0] == ssl.SSL_ERROR_WANT_WRITE:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
166 select.select([], [s], [])
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
167 else:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
168 raise
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
169 s.close()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
170 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
171 sys.stdout.write("\nNeeded %d calls to do_handshake() to establish session.\n" % count)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
172
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
173 def testFetchServerCert(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
174
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
175 pem = ssl.get_server_certificate(("svn.python.org", 443))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
176 if not pem:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
177 raise test_support.TestFailed("No server certificate on svn.python.org:443!")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
178
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
179 try:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
180 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=CERTFILE)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
181 except ssl.SSLError:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
182 #should fail
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
183 pass
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
184 else:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
185 raise test_support.TestFailed("Got server certificate %s for svn.python.org!" % pem)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
186
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
187 pem = ssl.get_server_certificate(("svn.python.org", 443), ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
188 if not pem:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
189 raise test_support.TestFailed("No server certificate on svn.python.org:443!")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
190 if test_support.verbose:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
191 sys.stdout.write("\nVerified certificate for svn.python.org:443 is\n%s\n" % pem)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
192
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
193
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
194 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
195 import threading
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
196 except ImportError:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
197 _have_threads = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
198 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
199
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
200 _have_threads = True
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
201
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
202 class ThreadedEchoServer(threading.Thread):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
203
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
204 class ConnectionHandler(threading.Thread):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
205
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
206 """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
207 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
208 that we can test the STARTTLS functionality."""
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
209
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
210 def __init__(self, server, connsock):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
211 self.server = server
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
212 self.running = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
213 self.sock = connsock
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
214 self.sock.setblocking(1)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
215 self.sslconn = None
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
216 threading.Thread.__init__(self)
48292
db589241e6f7 fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents: 48222
diff changeset
217 self.daemon = True
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
218
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
219 def show_conn_details(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
220 if self.server.certreqs == ssl.CERT_REQUIRED:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
221 cert = self.sslconn.getpeercert()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
222 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
223 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
224 cert_binary = self.sslconn.getpeercert(True)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
225 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
226 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
227 cipher = self.sslconn.cipher()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
228 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
229 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
230
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
231 def wrap_conn (self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
232 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
233 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
234 certfile=self.server.certificate,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
235 ssl_version=self.server.protocol,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
236 ca_certs=self.server.cacerts,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
237 cert_reqs=self.server.certreqs)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
238 except:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
239 if self.server.chatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
240 handle_error("\n server: bad connection attempt from " +
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
241 str(self.sock.getpeername()) + ":\n")
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
242 self.close()
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
243 if not self.server.expect_bad_connects:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
244 # here, we want to stop the server, because this shouldn't
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
245 # happen in the context of our test case
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
246 self.running = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
247 # 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
248 # harness, we want to stop the server
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
249 self.server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
250 return False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
251
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
252 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
253 return True
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
254
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
255 def read(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
256 if self.sslconn:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
257 return self.sslconn.read()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
258 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
259 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
260
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
261 def write(self, bytes):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
262 if self.sslconn:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
263 return self.sslconn.write(bytes)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
264 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
265 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
266
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
267 def close(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
268 if self.sslconn:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
269 self.sslconn.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
270 else:
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
271 self.sock._sock.close()
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
272
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
273 def run (self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
274 self.running = True
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
275 if not self.server.starttls_server:
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
276 if isinstance(self.sock, ssl.SSLSocket):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
277 self.sslconn = self.sock
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
278 elif not self.wrap_conn():
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
279 return
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
280 self.show_conn_details()
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
281 while self.running:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
282 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
283 msg = self.read()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
284 if not msg:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
285 # eof, so quit this handler
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
286 self.running = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
287 self.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
288 elif msg.strip() == 'over':
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
289 if test_support.verbose and self.server.connectionchatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
290 sys.stdout.write(" server: client closed connection\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
291 self.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
292 return
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
293 elif self.server.starttls_server and msg.strip() == 'STARTTLS':
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
294 if test_support.verbose and self.server.connectionchatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
295 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
296 self.write("OK\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
297 if not self.wrap_conn():
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
298 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
299 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
300 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
301 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
302 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
303 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
304 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
305 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
306 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
307 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
308 if (test_support.verbose and
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
309 self.server.connectionchatty):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
310 ctype = (self.sslconn and "encrypted") or "unencrypted"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
311 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
312 % (repr(msg), ctype, repr(msg.lower()), ctype))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
313 self.write(msg.lower())
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
314 except ssl.SSLError:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
315 if self.server.chatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
316 handle_error("Test server failure:\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
317 self.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
318 self.running = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
319 # 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
320 # harness, we want to stop the server
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
321 self.server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
322 except:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
323 handle_error('')
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
324
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
325 def __init__(self, certificate, ssl_version=None,
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
326 certreqs=None, cacerts=None, expect_bad_connects=False,
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
327 chatty=True, connectionchatty=False, starttls_server=False,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
328 wrap_accepting_socket=False):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
329
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
330 if ssl_version is None:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
331 ssl_version = ssl.PROTOCOL_TLSv1
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
332 if certreqs is None:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
333 certreqs = ssl.CERT_NONE
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
334 self.certificate = certificate
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
335 self.protocol = ssl_version
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
336 self.certreqs = certreqs
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
337 self.cacerts = cacerts
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
338 self.expect_bad_connects = expect_bad_connects
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
339 self.chatty = chatty
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
340 self.connectionchatty = connectionchatty
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
341 self.starttls_server = starttls_server
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
342 self.sock = socket.socket()
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
343 self.flag = None
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
344 if wrap_accepting_socket:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
345 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
346 certfile=self.certificate,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
347 cert_reqs = self.certreqs,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
348 ca_certs = self.cacerts,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
349 ssl_version = self.protocol)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
350 if test_support.verbose and self.chatty:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
351 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
352 self.port = test_support.bind_port(self.sock)
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
353 self.active = False
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 threading.Thread.__init__(self)
48292
db589241e6f7 fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents: 48222
diff changeset
355 self.daemon = True
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
356
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
357 def start (self, flag=None):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
358 self.flag = flag
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
359 threading.Thread.start(self)
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
360
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
361 def run (self):
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
362 self.sock.settimeout(0.5)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
363 self.sock.listen(5)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
364 self.active = True
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
365 if self.flag:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
366 # signal an event
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
367 self.flag.set()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
368 while self.active:
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
369 try:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
370 newconn, connaddr = self.sock.accept()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
371 if test_support.verbose and self.chatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
372 sys.stdout.write(' server: new connection from '
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
373 + str(connaddr) + '\n')
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
374 handler = self.ConnectionHandler(self, newconn)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
375 handler.start()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
376 except socket.timeout:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
377 pass
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
378 except KeyboardInterrupt:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
379 self.stop()
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
380 except:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
381 if self.chatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
382 handle_error("Test server failure:\n")
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
383 self.sock.close()
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
384
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
385 def stop (self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
386 self.active = False
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
387
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
388 class AsyncoreEchoServer(threading.Thread):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
389
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
390 class EchoServer (asyncore.dispatcher):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
391
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
392 class ConnectionHandler (asyncore.dispatcher_with_send):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
393
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
394 def __init__(self, conn, certfile):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
395 asyncore.dispatcher_with_send.__init__(self, conn)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
396 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
397 certfile=certfile,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
398 do_handshake_on_connect=True)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
399
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
400 def readable(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
401 if isinstance(self.socket, ssl.SSLSocket):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
402 while self.socket.pending() > 0:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
403 self.handle_read_event()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
404 return True
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
405
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
406 def handle_read(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
407 data = self.recv(1024)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
408 self.send(data.lower())
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
409
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
410 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
411 self.close()
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
412 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
413 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
414
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
415 def handle_error(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
416 raise
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
417
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
418 def __init__(self, certfile):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
419 self.certfile = certfile
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
420 asyncore.dispatcher.__init__(self)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
421 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
422 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
423 self.listen(5)
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
424
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
425 def handle_accept(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
426 sock_obj, addr = self.accept()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
427 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
428 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
429 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
430
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
431 def handle_error(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
432 raise
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
433
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
434 def __init__(self, certfile):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
435 self.flag = None
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
436 self.active = False
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
437 self.server = self.EchoServer(certfile)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
438 self.port = self.server.port
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
439 threading.Thread.__init__(self)
48292
db589241e6f7 fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents: 48222
diff changeset
440 self.daemon = True
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
441
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
442 def __str__(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
443 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
444
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
445 def start (self, flag=None):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
446 self.flag = flag
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
447 threading.Thread.start(self)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
448
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
449 def run (self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
450 self.active = True
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
451 if self.flag:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
452 self.flag.set()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
453 while self.active:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
454 try:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
455 asyncore.loop(1)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
456 except:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
457 pass
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
458
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
459 def stop (self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
460 self.active = False
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
461 self.server.close()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
462
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
463 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
464
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
465 class HTTPSServer(HTTPServer):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
466
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
467 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
468
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
469 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
470 # 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
471 self.certfile = certfile
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
472 self.active = False
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
473 self.active_lock = threading.Lock()
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
474 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
475
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
476 def __str__(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
477 return ('<%s %s:%s>' %
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
478 (self.__class__.__name__,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
479 self.server_name,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
480 self.server_port))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
481
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
482 def get_request (self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
483 # 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
484 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
485 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
486 certfile=self.certfile)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
487 return sslconn, addr
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
488
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
489 # The methods overridden below this are mainly so that we
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
490 # can run it in a thread and be able to stop it from another
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
491 # You probably wouldn't need them in other uses.
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
492
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
493 def server_activate(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
494 # We want to run this in a thread for testing purposes,
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
495 # so we override this to set timeout, so that we get
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
496 # a chance to stop the server
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
497 self.socket.settimeout(0.5)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
498 HTTPServer.server_activate(self)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
499
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
500 def serve_forever(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
501 # We want this to run in a thread, so we use a slightly
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
502 # modified version of "forever".
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
503 self.active = True
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
504 while 1:
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
505 try:
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
506 # We need to lock while handling the request.
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
507 # Another thread can close the socket after self.active
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
508 # has been checked and before the request is handled.
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
509 # This causes an exception when using the closed socket.
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
510 with self.active_lock:
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
511 if not self.active:
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
512 break
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
513 self.handle_request()
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
514 except socket.timeout:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
515 pass
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
516 except KeyboardInterrupt:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
517 self.server_close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
518 return
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
519 except:
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
520 sys.stdout.write(''.join(traceback.format_exception(*sys.exc_info())))
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
521 break
46252
0b2a4a1245a3 Apply same patch from 3k branch to try and prevent this test from hanging
Neal Norwitz <nnorwitz@gmail.com>
parents: 46197
diff changeset
522 time.sleep(0.1)
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
523
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
524 def server_close(self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
525 # Again, we want this to run in a thread, so we need to override
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
526 # close to clear the "active" flag, so that serve_forever() will
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
527 # terminate.
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
528 with self.active_lock:
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
529 HTTPServer.server_close(self)
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
530 self.active = False
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
531
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
532 class RootedHTTPRequestHandler(SimpleHTTPRequestHandler):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
533
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
534 # 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
535 # 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
536 # run from anywhere
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
537
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
538 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
539
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
540 root = None
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
541
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
542 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
543 """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
544
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
545 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
546 (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
547 probably be diagnosed.)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
548
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
549 """
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
550 # abandon query parameters
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
551 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
552 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
553 words = path.split('/')
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
554 words = filter(None, words)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
555 path = self.root
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
556 for word in words:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
557 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
558 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
559 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
560 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
561 return path
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
562
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
563 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
564
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
565 # 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
566
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
567 if test_support.verbose:
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
568 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
569 (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
570 self.server.server_port,
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
571 self.request.cipher(),
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
572 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
573 format%args))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
574
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
575
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
576 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
577 self.flag = None
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
578 self.active = False
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
579 self.RootedHTTPRequestHandler.root = os.path.split(CERTFILE)[0]
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
580 self.port = test_support.find_unused_port()
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
581 self.server = self.HTTPSServer(
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
582 (HOST, self.port), self.RootedHTTPRequestHandler, certfile)
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
583 threading.Thread.__init__(self)
48292
db589241e6f7 fix old API names in test_ssl
Benjamin Peterson <benjamin@python.org>
parents: 48222
diff changeset
584 self.daemon = True
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
585
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
586 def __str__(self):
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
587 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
588
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
589 def start (self, flag=None):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
590 self.flag = flag
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
591 threading.Thread.start(self)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
592
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
593 def run (self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
594 self.active = True
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
595 if self.flag:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
596 self.flag.set()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
597 self.server.serve_forever()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
598 self.active = False
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
599
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
600 def stop (self):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
601 self.active = False
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
602 self.server.server_close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
603
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
604
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
605 def badCertTest (certfile):
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
606 server = ThreadedEchoServer(CERTFILE,
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
607 certreqs=ssl.CERT_REQUIRED,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
608 cacerts=CERTFILE, chatty=False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
609 flag = threading.Event()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
610 server.start(flag)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
611 # wait for it to start
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
612 flag.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
613 # try to connect
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
614 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
615 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
616 s = ssl.wrap_socket(socket.socket(),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
617 certfile=certfile,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
618 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
619 s.connect((HOST, server.port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
620 except ssl.SSLError, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
621 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
622 sys.stdout.write("\nSSLError is %s\n" % x[1])
48002
560388cda163 catch socket.error errors in badCertTest
Bill Janssen <janssen@parc.com>
parents: 47849
diff changeset
623 except socket.error, x:
560388cda163 catch socket.error errors in badCertTest
Bill Janssen <janssen@parc.com>
parents: 47849
diff changeset
624 if test_support.verbose:
560388cda163 catch socket.error errors in badCertTest
Bill Janssen <janssen@parc.com>
parents: 47849
diff changeset
625 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
626 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
627 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
628 "Use of invalid cert should have failed!")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
629 finally:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
630 server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
631 server.join()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
632
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
633 def serverParamsTest (certfile, protocol, certreqs, cacertsfile,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
634 client_certfile, client_protocol=None, indata="FOO\n",
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
635 chatty=True, connectionchatty=False,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
636 wrap_accepting_socket=False):
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
637
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
638 server = ThreadedEchoServer(certfile,
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
639 certreqs=certreqs,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
640 ssl_version=protocol,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
641 cacerts=cacertsfile,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
642 chatty=chatty,
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
643 connectionchatty=connectionchatty,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
644 wrap_accepting_socket=wrap_accepting_socket)
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
645 flag = threading.Event()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
646 server.start(flag)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
647 # wait for it to start
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
648 flag.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
649 # try to connect
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
650 if client_protocol is None:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
651 client_protocol = protocol
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
652 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
653 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
654 s = ssl.wrap_socket(socket.socket(),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
655 certfile=client_certfile,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
656 ca_certs=cacertsfile,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
657 cert_reqs=certreqs,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
658 ssl_version=client_protocol)
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
659 s.connect((HOST, server.port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
660 except ssl.SSLError, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
661 raise test_support.TestFailed("Unexpected SSL error: " + str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
662 except Exception, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
663 raise test_support.TestFailed("Unexpected exception: " + str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
664 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
665 if connectionchatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
666 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
667 sys.stdout.write(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
668 " client: sending %s...\n" % (repr(indata)))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
669 s.write(indata)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
670 outdata = s.read()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
671 if connectionchatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
672 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
673 sys.stdout.write(" client: read %s\n" % repr(outdata))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
674 if outdata != indata.lower():
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
675 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
676 "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
677 % (outdata[:min(len(outdata),20)], len(outdata),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
678 indata[:min(len(indata),20)].lower(), len(indata)))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
679 s.write("over\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
680 if connectionchatty:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
681 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
682 sys.stdout.write(" client: closing connection.\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
683 s.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
684 finally:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
685 server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
686 server.join()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
687
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
688 def tryProtocolCombo (server_protocol,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
689 client_protocol,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
690 expectedToWork,
43329
b3a4a14d8ac3 Make sure test_ssl doesn't reference the ssl module in a
Bill Janssen <janssen@parc.com>
parents: 43328
diff changeset
691 certsreqs=None):
b3a4a14d8ac3 Make sure test_ssl doesn't reference the ssl module in a
Bill Janssen <janssen@parc.com>
parents: 43328
diff changeset
692
46197
01a7e66525c2 #2503 make singletons compared with "is" not == or !=
Benjamin Peterson <benjamin@python.org>
parents: 45722
diff changeset
693 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
694 certsreqs = ssl.CERT_NONE
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
695
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
696 if certsreqs == ssl.CERT_NONE:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
697 certtype = "CERT_NONE"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
698 elif certsreqs == ssl.CERT_OPTIONAL:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
699 certtype = "CERT_OPTIONAL"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
700 elif certsreqs == ssl.CERT_REQUIRED:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
701 certtype = "CERT_REQUIRED"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
702 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
703 formatstr = (expectedToWork and " %s->%s %s\n") or " {%s->%s} %s\n"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
704 sys.stdout.write(formatstr %
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
705 (ssl.get_protocol_name(client_protocol),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
706 ssl.get_protocol_name(server_protocol),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
707 certtype))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
708 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
709 serverParamsTest(CERTFILE, server_protocol, certsreqs,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
710 CERTFILE, CERTFILE, client_protocol, chatty=False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
711 except test_support.TestFailed:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
712 if expectedToWork:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
713 raise
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
714 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
715 if not expectedToWork:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
716 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
717 "Client protocol %s succeeded with server protocol %s!"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
718 % (ssl.get_protocol_name(client_protocol),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
719 ssl.get_protocol_name(server_protocol)))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
720
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
721
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
722 class ThreadedTests(unittest.TestCase):
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
723
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
724 def testRudeShutdown(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
725
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
726 listener_ready = threading.Event()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
727 listener_gone = threading.Event()
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
728 port = test_support.find_unused_port()
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
729
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
730 # `listener` runs in a thread. It opens a socket listening on
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
731 # PORT, and sits in an accept() until the main thread connects.
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
732 # Then it rudely closes the socket, and sets Event `listener_gone`
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
733 # to let the main thread know the socket is gone.
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
734 def listener():
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
735 s = 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
736 s.bind((HOST, port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
737 s.listen(5)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
738 listener_ready.set()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
739 s.accept()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
740 s = None # reclaim the socket object, which also closes it
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
741 listener_gone.set()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
742
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
743 def connector():
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
744 listener_ready.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
745 s = 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
746 s.connect((HOST, port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
747 listener_gone.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
748 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
749 ssl_sock = ssl.wrap_socket(s)
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
750 except IOError:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
751 pass
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
752 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
753 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
754 'connecting to closed SSL socket should have failed')
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
755
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
756 t = threading.Thread(target=listener)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
757 t.start()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
758 connector()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
759 t.join()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
760
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
761 def testEcho (self):
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
762
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
763 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
764 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
765 serverParamsTest(CERTFILE, ssl.PROTOCOL_TLSv1, ssl.CERT_NONE,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
766 CERTFILE, CERTFILE, ssl.PROTOCOL_TLSv1,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
767 chatty=True, connectionchatty=True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
768
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
769 def testReadCert(self):
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
770
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
771 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
772 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
773 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
774 server = ThreadedEchoServer(CERTFILE,
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
775 certreqs=ssl.CERT_NONE,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
776 ssl_version=ssl.PROTOCOL_SSLv23,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
777 cacerts=CERTFILE,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
778 chatty=False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
779 flag = threading.Event()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
780 server.start(flag)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
781 # wait for it to start
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
782 flag.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
783 # try to connect
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
784 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
785 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
786 s = ssl.wrap_socket(socket.socket(),
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
787 certfile=CERTFILE,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
788 ca_certs=CERTFILE,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
789 cert_reqs=ssl.CERT_REQUIRED,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
790 ssl_version=ssl.PROTOCOL_SSLv23)
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
791 s.connect((HOST, server.port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
792 except ssl.SSLError, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
793 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
794 "Unexpected SSL error: " + str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
795 except Exception, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
796 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
797 "Unexpected exception: " + str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
798 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
799 if not s:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
800 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
801 "Can't SSL-handshake with test server")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
802 cert = s.getpeercert()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
803 if not cert:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
804 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
805 "Can't get peer certificate.")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
806 cipher = s.cipher()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
807 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
808 sys.stdout.write(pprint.pformat(cert) + '\n')
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
809 sys.stdout.write("Connection cipher is " + str(cipher) + '.\n')
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
810 if not cert.has_key('subject'):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
811 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
812 "No subject field in certificate: %s." %
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
813 pprint.pformat(cert))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
814 if ((('organizationName', 'Python Software Foundation'),)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
815 not in cert['subject']):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
816 raise test_support.TestFailed(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
817 "Missing or invalid 'organizationName' field in certificate subject; "
45722
6f195755f144 Introduce a lock to fix a race condition which caused an exception in the test.
Neal Norwitz <nnorwitz@gmail.com>
parents: 44770
diff changeset
818 "should be 'Python Software Foundation'.")
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
819 s.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
820 finally:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
821 server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
822 server.join()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
823
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
824 def testNULLcert(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
825 badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
826 "nullcert.pem"))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
827 def testMalformedCert(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
828 badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
829 "badcert.pem"))
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
830 def testWrongCert(self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
831 badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
832 "wrongcert.pem"))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
833 def testMalformedKey(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
834 badCertTest(os.path.join(os.path.dirname(__file__) or os.curdir,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
835 "badkey.pem"))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
836
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
837 def testProtocolSSL2(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
838 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
839 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
840 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
841 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
842 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv2, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
843 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv23, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
844 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
845 tryProtocolCombo(ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_TLSv1, False)
42874
85eaecf9d678 Another patch from Bill Janssen that:
Neal Norwitz <nnorwitz@gmail.com>
parents: 42870
diff changeset
846
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
847 def testProtocolSSL23(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
848 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
849 sys.stdout.write("\n")
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
850 try:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
851 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv2, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
852 except test_support.TestFailed, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
853 # this fails on some older versions of OpenSSL (0.9.7l, for instance)
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
854 if test_support.verbose:
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
855 sys.stdout.write(
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
856 " SSL2 client to SSL23 server test unexpectedly failed:\n %s\n"
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
857 % str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
858 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
859 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
860 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
861
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
862 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
863 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
864 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
865
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
866 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
867 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
868 tryProtocolCombo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
869
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
870 def testProtocolSSL3(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
871 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
872 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
873 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
874 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
875 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
876 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv2, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
877 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
878 tryProtocolCombo(ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_TLSv1, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
879
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
880 def testProtocolTLS1(self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
881 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
882 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
883 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
884 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
885 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
886 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
887 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
888 tryProtocolCombo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv23, False)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
889
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
890 def testSTARTTLS (self):
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
891
48222
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
892 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
893
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
894 server = ThreadedEchoServer(CERTFILE,
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
895 ssl_version=ssl.PROTOCOL_TLSv1,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
896 starttls_server=True,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
897 chatty=True,
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
898 connectionchatty=True)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
899 flag = threading.Event()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
900 server.start(flag)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
901 # wait for it to start
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
902 flag.wait()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
903 # try to connect
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
904 wrapped = False
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
905 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
906 try:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
907 s = socket.socket()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
908 s.setblocking(1)
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
909 s.connect((HOST, server.port))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
910 except Exception, x:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
911 raise test_support.TestFailed("Unexpected exception: " + str(x))
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
912 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
913 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
914 sys.stdout.write("\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
915 for indata in msgs:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
916 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
917 sys.stdout.write(
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
918 " client: sending %s...\n" % repr(indata))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
919 if wrapped:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
920 conn.write(indata)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
921 outdata = conn.read()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
922 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
923 s.send(indata)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
924 outdata = s.recv(1024)
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
925 if (indata == "STARTTLS" and
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
926 outdata.strip().lower().startswith("ok")):
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
927 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
928 sys.stdout.write(
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
929 " client: read %s from server, starting TLS...\n"
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
930 % repr(outdata))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
931 conn = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
932 wrapped = True
48222
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
933 elif (indata == "ENDTLS" and
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
934 outdata.strip().lower().startswith("ok")):
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
935 if test_support.verbose:
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
936 sys.stdout.write(
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
937 " client: read %s from server, ending TLS...\n"
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
938 % repr(outdata))
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
939 s = conn.unwrap()
79fa3e0c0988 remove duplicate close() from ssl.py; expose unwrap and add test for it
Bill Janssen <janssen@parc.com>
parents: 48002
diff changeset
940 wrapped = False
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
941 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
942 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
943 sys.stdout.write(
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
944 " client: read %s from server\n" % repr(outdata))
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
945 if test_support.verbose:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
946 sys.stdout.write(" client: closing connection.\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
947 if wrapped:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
948 conn.write("over\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
949 else:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
950 s.send("over\n")
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
951 s.close()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
952 finally:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
953 server.stop()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
954 server.join()
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
955
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
956 def testSocketServer(self):
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
957
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
958 server = SocketServerHTTPSServer(CERTFILE)
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
959 flag = threading.Event()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
960 server.start(flag)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
961 # 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
962 flag.wait()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
963 # try to connect
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
964 try:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
965 if test_support.verbose:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
966 sys.stdout.write('\n')
43376
1b66e2a5796f use binary mode when reading files for testAsyncore to make Windows happy
Bill Janssen <janssen@parc.com>
parents: 43375
diff changeset
967 d1 = open(CERTFILE, 'rb').read()
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
968 d2 = ''
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
969 # 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
970 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
971 server.port, os.path.split(CERTFILE)[1])
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
972 f = urllib.urlopen(url)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
973 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
974 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
975 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
976 if test_support.verbose:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
977 sys.stdout.write(
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
978 " 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
979 % (len(d2), server))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
980 f.close()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
981 except:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
982 msg = ''.join(traceback.format_exception(*sys.exc_info()))
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
983 if test_support.verbose:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
984 sys.stdout.write('\n' + msg)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
985 raise test_support.TestFailed(msg)
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
986 else:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
987 if not (d1 == d2):
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
988 raise test_support.TestFailed(
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
989 "Couldn't fetch data from HTTPS server")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
990 finally:
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
991 server.stop()
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
992 server.join()
42866
d6d493b617e3 Fail gracefully if the cert files cannot be created
Neal Norwitz <nnorwitz@gmail.com>
parents: 42837
diff changeset
993
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
994 def testWrappedAccept (self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
995
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
996 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
997 sys.stdout.write("\n")
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
998 serverParamsTest(CERTFILE, ssl.PROTOCOL_SSLv23, ssl.CERT_REQUIRED,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
999 CERTFILE, CERTFILE, ssl.PROTOCOL_SSLv23,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1000 chatty=True, connectionchatty=True,
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1001 wrap_accepting_socket=True)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1002
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1003
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1004 def testAsyncoreServer (self):
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1005
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1006 indata = "TEST MESSAGE of mixed case\n"
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1007
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1008 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1009 sys.stdout.write("\n")
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1010 server = AsyncoreEchoServer(CERTFILE)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1011 flag = threading.Event()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1012 server.start(flag)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1013 # wait for it to start
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1014 flag.wait()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1015 # try to connect
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1016 try:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1017 try:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1018 s = ssl.wrap_socket(socket.socket())
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1019 s.connect(('127.0.0.1', server.port))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1020 except ssl.SSLError, x:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1021 raise test_support.TestFailed("Unexpected SSL error: " + str(x))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1022 except Exception, x:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1023 raise test_support.TestFailed("Unexpected exception: " + str(x))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1024 else:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1025 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1026 sys.stdout.write(
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1027 " client: sending %s...\n" % (repr(indata)))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1028 s.write(indata)
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1029 outdata = s.read()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1030 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1031 sys.stdout.write(" client: read %s\n" % repr(outdata))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1032 if outdata != indata.lower():
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1033 raise test_support.TestFailed(
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1034 "bad data <<%s>> (%d) received; expected <<%s>> (%d)\n"
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1035 % (outdata[:min(len(outdata),20)], len(outdata),
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1036 indata[:min(len(indata),20)].lower(), len(indata)))
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1037 s.write("over\n")
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1038 if test_support.verbose:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1039 sys.stdout.write(" client: closing connection.\n")
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1040 s.close()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1041 finally:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1042 server.stop()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1043 # wait for server thread to end
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1044 server.join()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1045
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1046
49089
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1047 def testAllRecvAndSendMethods(self):
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1048
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1049 if test_support.verbose:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1050 sys.stdout.write("\n")
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1051
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1052 server = ThreadedEchoServer(CERTFILE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1053 certreqs=ssl.CERT_NONE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1054 ssl_version=ssl.PROTOCOL_TLSv1,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1055 cacerts=CERTFILE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1056 chatty=True,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1057 connectionchatty=False)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1058 flag = threading.Event()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1059 server.start(flag)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1060 # wait for it to start
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1061 flag.wait()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1062 # try to connect
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1063 try:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1064 s = ssl.wrap_socket(socket.socket(),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1065 server_side=False,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1066 certfile=CERTFILE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1067 ca_certs=CERTFILE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1068 cert_reqs=ssl.CERT_NONE,
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1069 ssl_version=ssl.PROTOCOL_TLSv1)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1070 s.connect((HOST, server.port))
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1071 except ssl.SSLError as x:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1072 raise support.TestFailed("Unexpected SSL error: " + str(x))
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1073 except Exception as x:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1074 raise support.TestFailed("Unexpected exception: " + str(x))
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1075 else:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1076 # 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
1077 def _recv_into():
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1078 b = bytearray("\0"*100)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1079 count = s.recv_into(b)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1080 return b[:count]
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1081
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1082 def _recvfrom_into():
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1083 b = bytearray("\0"*100)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1084 count, addr = s.recvfrom_into(b)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1085 return b[:count]
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1086
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1087 # (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
1088 send_methods = [
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1089 ('send', s.send, True, []),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1090 ('sendto', s.sendto, False, ["some.address"]),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1091 ('sendall', s.sendall, True, []),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1092 ]
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1093 recv_methods = [
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1094 ('recv', s.recv, True, []),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1095 ('recvfrom', s.recvfrom, False, ["some.address"]),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1096 ('recv_into', _recv_into, True, []),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1097 ('recvfrom_into', _recvfrom_into, False, []),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1098 ]
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1099 data_prefix = u"PREFIX_"
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1100
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1101 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
1102 indata = data_prefix + meth_name
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1103 try:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1104 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
1105 outdata = s.read()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1106 outdata = outdata.decode('ASCII', 'strict')
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1107 if outdata != indata.lower():
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1108 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1109 "While sending with <<%s>> bad data "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1110 "<<%r>> (%d) received; "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1111 "expected <<%r>> (%d)\n" % (
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1112 meth_name, outdata[:20], len(outdata),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1113 indata[:20], len(indata)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1114 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1115 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1116 except ValueError as e:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1117 if expect_success:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1118 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1119 "Failed to send with method <<%s>>; "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1120 "expected to succeed.\n" % (meth_name,)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1121 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1122 if not str(e).startswith(meth_name):
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1123 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1124 "Method <<%s>> failed with unexpected "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1125 "exception message: %s\n" % (
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1126 meth_name, e
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1127 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1128 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1129
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1130 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
1131 indata = data_prefix + meth_name
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1132 try:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1133 s.send(indata.encode('ASCII', 'strict'))
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1134 outdata = recv_meth(*args)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1135 outdata = outdata.decode('ASCII', 'strict')
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1136 if outdata != indata.lower():
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1137 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1138 "While receiving with <<%s>> bad data "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1139 "<<%r>> (%d) received; "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1140 "expected <<%r>> (%d)\n" % (
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1141 meth_name, outdata[:20], len(outdata),
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1142 indata[:20], len(indata)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1143 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1144 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1145 except ValueError as e:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1146 if expect_success:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1147 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1148 "Failed to receive with method <<%s>>; "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1149 "expected to succeed.\n" % (meth_name,)
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1150 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1151 if not str(e).startswith(meth_name):
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1152 raise support.TestFailed(
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1153 "Method <<%s>> failed with unexpected "
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1154 "exception message: %s\n" % (
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1155 meth_name, e
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1156 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1157 )
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1158 # consume data
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1159 s.read()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1160
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1161 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
1162 s.close()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1163 finally:
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1164 server.stop()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1165 server.join()
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1166
37b70cd4a0f0 incorporate fixes from issue 3162; SSL doc patch
Bill Janssen <janssen@parc.com>
parents: 48292
diff changeset
1167
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
1168 def test_main(verbose=False):
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1169 if skip_expected:
43243
e2b4fc960830 SSL certificate distinguished names should be represented by tuples
Bill Janssen <janssen@parc.com>
parents: 42901
diff changeset
1170 raise test_support.TestSkipped("No SSL support")
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1171
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 46252
diff changeset
1172 global CERTFILE, SVN_PYTHON_ORG_ROOT_CERT
42901
c09c3264a900 > Regardless, building a fixed test certificate and checking it in sounds like
Guido van Rossum <guido@python.org>
parents: 42885
diff changeset
1173 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
1174 "keycert.pem")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1175 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
1176 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
1177 "https_svn_python_org_root.pem")
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1178
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1179 if (not os.path.exists(CERTFILE) or
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1180 not os.path.exists(SVN_PYTHON_ORG_ROOT_CERT)):
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1181 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
1182
47848
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1183 TESTPORT = test_support.find_unused_port()
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1184 if not TESTPORT:
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1185 raise test_support.TestFailed("Can't find open port to test servers on!")
8a281bfc058d various SSL fixes; issues 1251, 3162, 3212
Bill Janssen <janssen@parc.com>
parents: 46362
diff changeset
1186
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1187 tests = [BasicTests]
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1188
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1189 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
1190 tests.append(NetworkedTests)
43375
9041965a92f2 Add support for asyncore server-side SSL support. This requires
Bill Janssen <janssen@parc.com>
parents: 43329
diff changeset
1191
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1192 if _have_threads:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1193 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
1194 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
1195 tests.append(ThreadedTests)
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1196
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1197 test_support.run_unittest(*tests)
42828
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1198
43325
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1199 if _have_threads:
193020bf52dc More work on SSL support.
Bill Janssen <janssen@parc.com>
parents: 43243
diff changeset
1200 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
1201
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1202 if __name__ == "__main__":
08b6278aa1f4 Server-side SSL and certificate validation, by Bill Janssen.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1203 test_main()