Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: net/tools/testserver/testserver.py

Issue 3177015: Improve support for requesting client certs in tlslite (Closed)
Patch Set: Cert requests got turned on across the board Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/tlslite/README.chromium » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2006-2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """This is a simple HTTP server used for testing Chrome. 6 """This is a simple HTTP server used for testing Chrome.
7 7
8 It supports several test URLs, as specified by the handlers in TestPageHandler. 8 It supports several test URLs, as specified by the handlers in TestPageHandler.
9 It defaults to living on localhost:8888. 9 It defaults to living on localhost:8888.
10 It can use https if you specify the flag --https=CERT where CERT is the path 10 It can use https if you specify the flag --https=CERT where CERT is the path
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 self.stop = False 51 self.stop = False
52 self.nonce_time = None 52 self.nonce_time = None
53 while not self.stop: 53 while not self.stop:
54 self.handle_request() 54 self.handle_request()
55 self.socket.close() 55 self.socket.close()
56 56
57 class HTTPSServer(tlslite.api.TLSSocketServerMixIn, StoppableHTTPServer): 57 class HTTPSServer(tlslite.api.TLSSocketServerMixIn, StoppableHTTPServer):
58 """This is a specialization of StoppableHTTPerver that add https support.""" 58 """This is a specialization of StoppableHTTPerver that add https support."""
59 59
60 def __init__(self, server_address, request_hander_class, cert_path, 60 def __init__(self, server_address, request_hander_class, cert_path,
61 ssl_client_auth): 61 ssl_client_auth, ssl_client_cas):
62 s = open(cert_path).read() 62 s = open(cert_path).read()
63 x509 = tlslite.api.X509() 63 x509 = tlslite.api.X509()
64 x509.parse(s) 64 x509.parse(s)
65 self.cert_chain = tlslite.api.X509CertChain([x509]) 65 self.cert_chain = tlslite.api.X509CertChain([x509])
66 s = open(cert_path).read() 66 s = open(cert_path).read()
67 self.private_key = tlslite.api.parsePEMKey(s, private=True) 67 self.private_key = tlslite.api.parsePEMKey(s, private=True)
68 self.ssl_client_auth = ssl_client_auth 68 self.ssl_client_auth = ssl_client_auth
69 self.ssl_client_cas = []
70 for ca_file in ssl_client_cas:
71 s = open(ca_file).read()
72 x509 = tlslite.api.X509()
73 x509.parse(s)
74 self.ssl_client_cas.append(x509.subject)
69 75
70 self.session_cache = tlslite.api.SessionCache() 76 self.session_cache = tlslite.api.SessionCache()
71 StoppableHTTPServer.__init__(self, server_address, request_hander_class) 77 StoppableHTTPServer.__init__(self, server_address, request_hander_class)
72 78
73 def handshake(self, tlsConnection): 79 def handshake(self, tlsConnection):
74 """Creates the SSL connection.""" 80 """Creates the SSL connection."""
75 try: 81 try:
76 tlsConnection.handshakeServer(certChain=self.cert_chain, 82 tlsConnection.handshakeServer(certChain=self.cert_chain,
77 privateKey=self.private_key, 83 privateKey=self.private_key,
78 sessionCache=self.session_cache, 84 sessionCache=self.session_cache,
79 reqCert=self.ssl_client_auth) 85 reqCert=self.ssl_client_auth,
86 reqCAs=self.ssl_client_cas)
80 tlsConnection.ignoreAbruptClose = True 87 tlsConnection.ignoreAbruptClose = True
81 return True 88 return True
82 except tlslite.api.TLSError, error: 89 except tlslite.api.TLSError, error:
83 print "Handshake failure:", str(error) 90 print "Handshake failure:", str(error)
84 return False 91 return False
85 92
86 class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler): 93 class TestPageHandler(BaseHTTPServer.BaseHTTPRequestHandler):
87 94
88 def __init__(self, request, client_address, socket_server): 95 def __init__(self, request, client_address, socket_server):
89 self._connect_handlers = [ 96 self._connect_handlers = [
(...skipping 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 1215
1209 port = options.port 1216 port = options.port
1210 1217
1211 # Try to free up the port if there's an orphaned old instance. 1218 # Try to free up the port if there's an orphaned old instance.
1212 TryKillingOldServer(port) 1219 TryKillingOldServer(port)
1213 1220
1214 if options.server_type == SERVER_HTTP: 1221 if options.server_type == SERVER_HTTP:
1215 if options.cert: 1222 if options.cert:
1216 # let's make sure the cert file exists. 1223 # let's make sure the cert file exists.
1217 if not os.path.isfile(options.cert): 1224 if not os.path.isfile(options.cert):
1218 print 'specified cert file not found: ' + options.cert + ' exiting...' 1225 print 'specified server cert file not found: ' + options.cert + \
1226 ' exiting...'
1219 return 1227 return
1228 for ca_cert in options.ssl_client_ca:
1229 if not os.path.isfile(ca_cert):
1230 print 'specified trusted client CA file not found: ' + ca_cert + \
1231 ' exiting...'
1232 return
1220 server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert, 1233 server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert,
1221 options.ssl_client_auth) 1234 options.ssl_client_auth, options.ssl_client_ca)
1222 print 'HTTPS server started on port %d...' % port 1235 print 'HTTPS server started on port %d...' % port
1223 else: 1236 else:
1224 server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler) 1237 server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler)
1225 print 'HTTP server started on port %d...' % port 1238 print 'HTTP server started on port %d...' % port
1226 1239
1227 server.data_dir = MakeDataDir() 1240 server.data_dir = MakeDataDir()
1228 server.file_root_url = options.file_root_url 1241 server.file_root_url = options.file_root_url
1229 server._sync_handler = None 1242 server._sync_handler = None
1230 1243
1231 MakeDumpDir(server.data_dir) 1244 MakeDumpDir(server.data_dir)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 option_parser.add_option('', '--port', default='8888', type='int', 1291 option_parser.add_option('', '--port', default='8888', type='int',
1279 help='Port used by the server.') 1292 help='Port used by the server.')
1280 option_parser.add_option('', '--data-dir', dest='data_dir', 1293 option_parser.add_option('', '--data-dir', dest='data_dir',
1281 help='Directory from which to read the files.') 1294 help='Directory from which to read the files.')
1282 option_parser.add_option('', '--https', dest='cert', 1295 option_parser.add_option('', '--https', dest='cert',
1283 help='Specify that https should be used, specify ' 1296 help='Specify that https should be used, specify '
1284 'the path to the cert containing the private key ' 1297 'the path to the cert containing the private key '
1285 'the server should use.') 1298 'the server should use.')
1286 option_parser.add_option('', '--ssl-client-auth', action='store_true', 1299 option_parser.add_option('', '--ssl-client-auth', action='store_true',
1287 help='Require SSL client auth on every connection.') 1300 help='Require SSL client auth on every connection.')
1301 option_parser.add_option('', '--ssl-client-ca', action='append', default=[],
1302 help='Specify that the client certificate request '
1303 'should indicate that it supports the CA contained '
1304 'in the specified certificate file')
1288 option_parser.add_option('', '--file-root-url', default='/files/', 1305 option_parser.add_option('', '--file-root-url', default='/files/',
1289 help='Specify a root URL for files served.') 1306 help='Specify a root URL for files served.')
1290 option_parser.add_option('', '--never-die', default=False, 1307 option_parser.add_option('', '--never-die', default=False,
1291 action="store_true", 1308 action="store_true",
1292 help='Prevent the server from dying when visiting ' 1309 help='Prevent the server from dying when visiting '
1293 'a /kill URL. Useful for manually running some ' 1310 'a /kill URL. Useful for manually running some '
1294 'tests.') 1311 'tests.')
1295 options, args = option_parser.parse_args() 1312 options, args = option_parser.parse_args()
1296 1313
1297 sys.exit(main(options, args)) 1314 sys.exit(main(options, args))
OLDNEW
« no previous file with comments | « no previous file | third_party/tlslite/README.chromium » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698