| Index: net/tools/testserver/testserver.py
|
| diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
|
| index e8241cb6e389643f6c7440722467a609c3e85a17..8fd723629c47a19df23e09b0a003f173ae4fe64b 100755
|
| --- a/net/tools/testserver/testserver.py
|
| +++ b/net/tools/testserver/testserver.py
|
| @@ -1683,13 +1683,17 @@ class TestPageHandler(testserver_base.BasePageHandler):
|
|
|
| class OCSPHandler(testserver_base.BasePageHandler):
|
| def __init__(self, request, client_address, socket_server):
|
| - handlers = [self.OCSPResponse]
|
| + handlers = [self.OCSPResponse, self.CaIssuersResponse]
|
| self.ocsp_response = socket_server.ocsp_response
|
| + self.ca_issuers_response = socket_server.ca_issuers_response
|
| testserver_base.BasePageHandler.__init__(self, request, client_address,
|
| socket_server, [], handlers, [],
|
| handlers, [])
|
|
|
| def OCSPResponse(self):
|
| + if not self._ShouldHandleRequest("/ocsp"):
|
| + return False
|
| + print 'handling ocsp request'
|
| self.send_response(200)
|
| self.send_header('Content-Type', 'application/ocsp-response')
|
| self.send_header('Content-Length', str(len(self.ocsp_response)))
|
| @@ -1697,6 +1701,17 @@ class OCSPHandler(testserver_base.BasePageHandler):
|
|
|
| self.wfile.write(self.ocsp_response)
|
|
|
| + def CaIssuersResponse(self):
|
| + if not self._ShouldHandleRequest("/ca_issuers"):
|
| + return False
|
| + print 'handling ca_issuers request'
|
| + self.send_response(200)
|
| + self.send_header('Content-Type', 'application/pkix-cert')
|
| + self.send_header('Content-Length', str(len(self.ca_issuers_response)))
|
| + self.end_headers()
|
| +
|
| + self.wfile.write(self.ca_issuers_response)
|
| +
|
|
|
| class TCPEchoHandler(SocketServer.BaseRequestHandler):
|
| """The RequestHandler class for TCP echo server.
|
| @@ -1898,6 +1913,20 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| 'specified server cert file not found: ' +
|
| self.options.cert_and_key_file + ' exiting...')
|
| pem_cert_and_key = file(self.options.cert_and_key_file, 'r').read()
|
| + elif self.options.aia_intermediate:
|
| + self.__ocsp_server = OCSPServer((host, 0), OCSPHandler)
|
| + print ('AIA server started on %s:%d...' %
|
| + (host, self.__ocsp_server.server_port))
|
| +
|
| + (pem_cert_and_key, intermediate_cert_der) = \
|
| + minica.GenerateCertKeyAndIntermediate(
|
| + subject = "127.0.0.1",
|
| + ca_issuers_url = ("http://%s:%d/ca_issuers" %
|
| + (host, self.__ocsp_server.server_port)),
|
| + serial = self.options.cert_serial)
|
| +
|
| + self.__ocsp_server.ocsp_response = None
|
| + self.__ocsp_server.ca_issuers_response = intermediate_cert_der
|
| else:
|
| # generate a new certificate and run an OCSP server for it.
|
| self.__ocsp_server = OCSPServer((host, 0), OCSPHandler)
|
| @@ -1976,6 +2005,7 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| self.__ocsp_server.ocsp_response = '30030a0103'.decode('hex')
|
| else:
|
| self.__ocsp_server.ocsp_response = ocsp_der
|
| + self.__ocsp_server.ca_issuers_response = None
|
|
|
| for ca_cert in self.options.ssl_client_ca:
|
| if not os.path.isfile(ca_cert):
|
| @@ -2137,6 +2167,11 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| 'path to the file containing the certificate '
|
| 'and private key for the server in PEM '
|
| 'format')
|
| + self.option_parser.add_option('--aia-intermediate', action='store_true',
|
| + dest='aia_intermediate',
|
| + help='generate a certificate chain that '
|
| + 'requires AIA cert fetching, and run a '
|
| + 'server to respond to the AIA request.')
|
| self.option_parser.add_option('--ocsp', dest='ocsp', default='ok',
|
| help='The type of OCSP response generated '
|
| 'for the automatically generated '
|
|
|