def main(): args = parse_args() logger = utils.configure_logger('doh-proxy', args.level) ssl_ctx = utils.create_ssl_context(args, http2=True) loop = asyncio.get_event_loop() for addr in args.listen_address: coro = loop.create_server( lambda: H2Protocol(upstream_resolver=args.upstream_resolver, upstream_port=args.upstream_port, uri=args.uri, logger=logger, debug=args.debug), host=addr, port=args.port, ssl=ssl_ctx) server = loop.run_until_complete(coro) # Serve requests until Ctrl+C is pressed logger.info('Serving on {}'.format(server)) try: loop.run_forever() except KeyboardInterrupt: pass # Close the server server.close() loop.run_until_complete(server.wait_closed()) loop.close()
def setup_ssl(parser: ArgumentParser, options: Namespace): """ Setup the SSL Context """ ssl_context = None # If SSL is wanted, both certfile and keyfile must # be passed if bool(options.certfile) ^ bool(options.keyfile): parser.error("To use SSL both --certfile and --keyfile must be passed") elif options.certfile and options.keyfile: ssl_context = utils.create_ssl_context(options) return ssl_context
def test_proxy_ssl_context_http2_enabled(self): """ Test a ssl context with http2 enabled """ ssl_context = utils.create_ssl_context(self.args, http2=True) self.assertIsInstance(ssl_context, ssl.SSLContext) # enable http2 self.assertEqual(ssl_context.set_alpn_protocols.called, 1)
def test_proxy_ssl_context(self): """ Test a default ssl context, it should have http2 disabled """ ssl_context = utils.create_ssl_context(self.args) self.assertIsInstance(ssl_context, ssl.SSLContext) # don't enable http2 self.assertEqual(ssl_context.set_alpn_protocols.called, 0)