ocsp_status = ocsp.OCSPCertStatus.REVOKED revocation_reason = x509.ReasonFlags.unspecified # "... +0000 UTC" => "+0000" revoked_at = re.sub(r'( \+\d{4}).*$', r'\1', data['RevokedAt']) revocation_time = parser.parse(revoked_at) ocsp_response = ocsp.OCSPResponseBuilder().add_response( cert=cert, issuer=issuer_cert, algorithm=hashes.SHA1(), cert_status=ocsp_status, this_update=now, next_update=now + datetime.timedelta(hours=1), revocation_time=revocation_time, revocation_reason=revocation_reason).responder_id( ocsp.OCSPResponderEncoding.NAME, issuer_cert).sign(issuer_key, hashes.SHA256()) self.send_response(200) self.end_headers() self.wfile.write(ocsp_response.public_bytes( serialization.Encoding.DER)) if __name__ == '__main__': try: GracefulTCPServer(('', MOCK_OCSP_SERVER_PORT), _ProxyHandler).serve_forever() except KeyboardInterrupt: pass
from certbot_integration_tests.utils.misc import GracefulTCPServer def _create_proxy(mapping): # pylint: disable=missing-function-docstring class ProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler): # pylint: disable=missing-class-docstring def do_GET(self): headers = {key.lower(): value for key, value in self.headers.items()} backend = [backend for pattern, backend in mapping.items() if re.match(pattern, headers['host'])][0] response = requests.get(backend + self.path, headers=headers) self.send_response(response.status_code) for key, value in response.headers.items(): self.send_header(key, value) self.end_headers() self.wfile.write(response.content) return ProxyHandler if __name__ == '__main__': http_port = int(sys.argv[1]) port_mapping = json.loads(sys.argv[2]) httpd = GracefulTCPServer(('', http_port), _create_proxy(port_mapping)) try: httpd.serve_forever() except KeyboardInterrupt: pass