Обход неверного сертификата SSL для сервера Kestrel, отображаемого в WebView2

Данный

  • Приложение WPF запускает сервер Kestrel
  • Пустельга слушает http://0.0.0.0:5000 а также https://0.0.0.0:6000
  • Kestrel указывает на статический HTML-файл index.html
  • WPF показывает элемент управления браузером WebView2, который указывает на https://127.0.0.1:6000/index.html

Полученные результаты

  • Если WebView2 указывает на http://127.0.0.1:5000/index.html все работает нормально
  • Если WebView2 указывает на https://127.0.0.1:6000/index.html Я получаю сообщение об ошибке ненадежного сертификата

Вопрос

  • Можно ли отключить или игнорировать проверку SSL для localhost в Kestrel или WebView2

Не следует трогать настройки Windows, например, пометить сертификат "localhost" как доверенный в "msmc" или создать самозаверяющие сертификаты, потому что это приложение WPF должно работать на разных компьютерах.

Другими словами, должен быть более простой способ, чем описано в этой статье.

Пустельга

общедоступный класс WebServer
{
  общедоступная статическая задача Run()
  {
    var configuration = new ConfigurationBuilder().Build();

    var urls = new[]
    {
      "http://0.0.0.0:7000",
      "https://0.0.0.0:8000"
    };

    var environment = WebHost.CreateDefaultBuilder(новая строка [0]).UseConfiguration(конфигурация).UseUrls(URL-адреса).UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup  ();

    вернуть environment.Build().RunAsync();
  }
}

общедоступный класс WebStartup
{
  общедоступная конфигурация IConfiguration {получить;
  }

  общедоступный WebStartup(конфигурация IConfiguration)
  {
    Конфигурация = конфигурация;
  }

  public void ConfigureServices (службы IServiceCollection)
  {
    services.AddSpaStaticFiles (конфигурация =>
    {
      configuration.RootPath = "index.html";
    });
  }

  public void Configure(приложение IApplicationBuilder, IWebHostEnvironment env)
  {
    app.UseDeveloperExceptionPage();
    //app.UseHsts();
    //app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSpaStaticFiles();
  }
}

Элемент управления WebView2 в WPF

общедоступный MainWindow()
{
  WebServer.Run();

  InitializeComponent();

  WebView.Source = новый Uri("https://127.0.0.1:6000/index.html"); // HTTP на 5000 работает, HTTPS 6000 - нет
  WebView.NavigationCompleted += (отправитель объекта, аргументы CoreWebView2NavigationCompletedEventArgs) =>
  {
    WebView.InvalidateVisual();
  };
}

2 ответа

WebView2 в настоящее время не предоставляет эту функцию напрямую. Если хотите, вы можете открыть вопрос в WebView2 Feedback, и мы можем сделать запрос функции.

В качестве обходного пути вы можете попробовать использовать метод CoreWebView2.CallDevToolsProtocolMethodAsync для вызова метода Security.setIgnoreCertificateErrors DevTools Protocol. Однако я не пробовал setIgnoreCertificateErrors, и он также помечен как экспериментальный, поэтому не уверен, что он будет работать так, как вы хотите.

расширения

       public static CoreWebView2EnvironmentOptions AddArg(this CoreWebView2EnvironmentOptions options, string arg)
        {
            options.AdditionalBrowserArguments += $" {arg}";
            return options;
        }
        public static CoreWebView2EnvironmentOptions AddArg(this CoreWebView2EnvironmentOptions options, string arg,string value)
        {
            options.AdditionalBrowserArguments += $" {arg}={value}";
            return options;
        }

ручная настройка

       var env = await CoreWebView2Environment.CreateAsync(userDataFolder: "Cache",
                    options:new CoreWebView2EnvironmentOptions()
                        .AddArg("--ignore-certificate-errors")
                    );
                await _webBrowser.EnsureCoreWebView2Async(env);
Другие вопросы по тегам