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

Unified Diff: net/tools/testserver/testserver.py

Issue 8857002: net: split the SSL session cache between incognito and normal. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: net/tools/testserver/testserver.py
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
index 0d4a4308fff1689040c0e32f9ab54f59744b9dc1..35a08c465c07b2d8702327815824457c3c383b6b 100755
--- a/net/tools/testserver/testserver.py
+++ b/net/tools/testserver/testserver.py
@@ -68,6 +68,20 @@ def debug(str):
debug_output.write(str + "\n")
debug_output.flush()
+class RecordingSSLSessionCache(object):
+ """RecordingSSLSessionCache acts as a TLS session cache and maintains a log of
+ lookups and inserts in order to test session cache behaviours."""
+
+ def __init__(self):
+ self.log = []
+
+ def __getitem__(self, sessionID):
+ self.log.append(('lookup', sessionID))
+ raise KeyError()
+
+ def __setitem__(self, sessionID, session):
+ self.log.append(('insert', sessionID))
+
class StoppableHTTPServer(BaseHTTPServer.HTTPServer):
"""This is a specialization of of BaseHTTPServer to allow it
to be exited cleanly (by setting its "stop" member to True)."""
@@ -83,7 +97,8 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn, StoppableHTTPServer):
"""This is a specialization of StoppableHTTPerver that add https support."""
def __init__(self, server_address, request_hander_class, cert_path,
- ssl_client_auth, ssl_client_cas, ssl_bulk_ciphers):
+ ssl_client_auth, ssl_client_cas, ssl_bulk_ciphers,
+ record_resume_info):
s = open(cert_path).read()
x509 = tlslite.api.X509()
x509.parse(s)
@@ -101,7 +116,12 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn, StoppableHTTPServer):
if ssl_bulk_ciphers is not None:
self.ssl_handshake_settings.cipherNames = ssl_bulk_ciphers
- self.session_cache = tlslite.api.SessionCache()
+ if record_resume_info:
+ # If record_resume_info is true then we'll replace the session cache with
+ # an object that records the lookups and inserts that it sees.
+ self.session_cache = RecordingSSLSessionCache()
+ else:
+ self.session_cache = tlslite.api.SessionCache()
StoppableHTTPServer.__init__(self, server_address, request_hander_class)
def handshake(self, tlsConnection):
@@ -357,6 +377,7 @@ class TestPageHandler(BasePageHandler):
self.ClientRedirectHandler,
self.MultipartHandler,
self.MultipartSlowHandler,
+ self.GetSSLSessionCacheHandler,
self.DefaultResponseHandler]
post_handlers = [
self.EchoTitleHandler,
@@ -1380,6 +1401,23 @@ class TestPageHandler(BasePageHandler):
self.wfile.write('--' + bound + '--')
return True
+ def GetSSLSessionCacheHandler(self):
+ """Send a reply containing a log of the session cache operations."""
+
+ if not self._ShouldHandleRequest('/ssl-session-cache'):
+ return False
+
+ self.send_response(200)
+ self.send_header('Content-Type', 'text/plain')
+ self.end_headers()
+ try:
+ for (action, sessionID) in self.server.session_cache.log:
+ self.wfile.write('%s\t%s\n' % (action, sessionID.encode('hex')))
+ except AttributeError, e:
+ self.wfile.write('Pass --https-record-resume in order to use' +
+ ' this request')
+ return True
+
def DefaultResponseHandler(self):
"""This is the catch-all response handler for requests that aren't handled
by one of the special handlers above.
@@ -1805,7 +1843,7 @@ def main(options, args):
return
server = HTTPSServer(('127.0.0.1', port), TestPageHandler, options.cert,
options.ssl_client_auth, options.ssl_client_ca,
- options.ssl_bulk_cipher)
+ options.ssl_bulk_cipher, options.record_resume)
print 'HTTPS server started on port %d...' % server.server_port
else:
server = StoppableHTTPServer(('127.0.0.1', port), TestPageHandler)
@@ -1921,6 +1959,11 @@ if __name__ == '__main__':
help='Specify that https should be used, specify '
'the path to the cert containing the private key '
'the server should use.')
+ option_parser.add_option('', '--https-record-resume', dest='record_resume',
+ const=True, default=False, action='store_const',
+ help='Record resumption cache events rather than'
+ ' resuming as normal. Allows the use of the'
+ ' /ssl-session-cache request')
option_parser.add_option('', '--ssl-client-auth', action='store_true',
help='Require SSL client auth on every connection.')
option_parser.add_option('', '--ssl-client-ca', action='append', default=[],

Powered by Google App Engine
This is Rietveld 408576698