From d8e05b74e7cade9e4eaafc5e06bb6ad1b225570f Mon Sep 17 00:00:00 2001 From: klzgrad Date: Thu, 21 May 2020 00:19:03 +0800 Subject: [PATCH] Add cert net fetcher --- src/net/tools/naive/naive_proxy_bin.cc | 34 +++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/net/tools/naive/naive_proxy_bin.cc b/src/net/tools/naive/naive_proxy_bin.cc index 2befedd111..e8f65a232f 100644 --- a/src/net/tools/naive/naive_proxy_bin.cc +++ b/src/net/tools/naive/naive_proxy_bin.cc @@ -29,6 +29,8 @@ #include "net/base/auth.h" #include "net/base/network_isolation_key.h" #include "net/base/url_util.h" +#include "net/cert/cert_verifier.h" +#include "net/cert_net/cert_net_fetcher_url_request.h" #include "net/dns/host_resolver.h" #include "net/dns/mapped_host_resolver.h" #include "net/http/http_auth.h" @@ -113,9 +115,29 @@ std::unique_ptr GetConstants() { return constants_dict; } +std::unique_ptr BuildCertURLRequestContext( + net::NetLog* net_log) { + net::URLRequestContextBuilder builder; + + builder.DisableHttpCache(); + builder.set_net_log(net_log); + + net::ProxyConfig proxy_config; + auto proxy_service = + net::ConfiguredProxyResolutionService::CreateWithoutProxyResolver( + std::make_unique( + net::ProxyConfigWithAnnotation(proxy_config, kTrafficAnnotation)), + net_log); + proxy_service->ForceReloadProxyConfig(); + builder.set_proxy_resolution_service(std::move(proxy_service)); + + return builder.Build(); +} + // Builds a URLRequestContext assuming there's only a single loop. std::unique_ptr BuildURLRequestContext( const Params& params, + scoped_refptr cert_net_fetcher, net::NetLog* net_log) { net::URLRequestContextBuilder builder; @@ -137,6 +159,9 @@ std::unique_ptr BuildURLRequestContext( builder.set_host_mapping_rules(params.host_resolver_rules); } + builder.SetCertVerifier( + net::CertVerifier::CreateDefault(std::move(cert_net_fetcher))); + auto context = builder.Build(); if (!params.proxy_url.empty() && !params.proxy_user.empty() && @@ -467,7 +492,14 @@ int main(int argc, char* argv[]) { net::NetLogCaptureMode::kDefault); } - auto context = BuildURLRequestContext(params, net_log); + auto cert_context = BuildCertURLRequestContext(net_log); + scoped_refptr cert_net_fetcher; +#if defined(OS_LINUX) || defined(OS_MAC) || defined(OS_ANDROID) + cert_net_fetcher = base::MakeRefCounted(); + cert_net_fetcher->SetURLRequestContext(cert_context.get()); +#endif + auto context = + BuildURLRequestContext(params, std::move(cert_net_fetcher), net_log); auto* session = context->http_transaction_factory()->GetSession(); auto listen_socket =