.net-core - 绕过 WebView2 中显示的 Kestrel 服务器的无效 SSL 证书

标签 .net-core webview2

给定

  • WPF 应用启动 Kestrel 服务器
  • Kestrel 监听 http://0.0.0.0:5000https://0.0.0.0:6000
  • Kestrel 指向静态 HTML 文件 index.html
  • WPF 显示指向 https://127.0.0.1:6000/index.html
  • 的浏览器控件 WebView2

结果

  • 如果 WebView2 指向 http://127.0.0.1:5000/index.html 一切正常
  • 如果 WebView2 指向 https://127.0.0.1:6000/index.html 我会收到有关不受信任的证书的错误

问题

  • 是否可以在 Kestrel 或 WebView2 中禁用或忽略本地主机的 SSL 验证

不应触及 Windows 设置,例如将“localhost”证书标记为在“msmc”中受信任或生成自签名证书,因为此 WPF 应用程序应该在不同的计算机上运行。

换句话说,一定有比这个 article 中描述的更简单的方法.

红隼

public class WebServer
{
  public static Task 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(new string[0])
      .UseConfiguration(configuration)
      .UseUrls(urls)
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseIISIntegration()
      .UseStartup<WebStartup>();

    return environment.Build().RunAsync();
  }
}

public class WebStartup
{
  public IConfiguration Configuration { get; }

  public WebStartup(IConfiguration configuration)
  {
    Configuration = configuration;
  }

  public void ConfigureServices(IServiceCollection services)
  {
    services.AddSpaStaticFiles(configuration =>
    {
      configuration.RootPath = "index.html";
    });
  }

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  {
    app.UseDeveloperExceptionPage();
    //app.UseHsts();
    //app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSpaStaticFiles();
  }
}

WPF 中的 WebView2 控件

public MainWindow()
{
  WebServer.Run();

  InitializeComponent();

  WebView.Source = new Uri("https://127.0.0.1:6000/index.html"); // HTTP on 5000 works, HTTPS 6000 - no
  WebView.NavigationCompleted += (object sender, CoreWebView2NavigationCompletedEventArgs args) =>
  {
    WebView.InvalidateVisual();
  };
}

最佳答案

WebView2 当前不直接公开该功能。如果你愿意,你可以在 WebView2 Feedback 中打开一个问题。我们可以提出功能请求。

作为解决方法,您可以尝试使用 CoreWebView2.CallDevToolsProtocolMethodAsync method调用 Security.setIgnoreCertificateErrors DevTools Protocol method .但是,我还没有尝试过 setIgnoreCertificateErrors,它也被标记为实验性的,所以不是积极的,它将以你想要的方式工作。

关于.net-core - 绕过 WebView2 中显示的 Kestrel 服务器的无效 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62512147/

相关文章:

WebView2 控件不在工具箱中

c# - WebView2 - 该网站正在尝试打开(应用程序)

unit-testing - 在Windows PC的Linux容器中运行.NET单元测试

c# - 如何在 .NET Core 3.1.0 中使用 ACL 在 Mac OS 上管理文件夹权限

.net-core - .NET Core 的 IWebProxy 实现位置

asp.net-core - 如何将依赖注入(inject)与 .NET Core 2 API 选项结合使用?

asp.net-core - Microsoft Distributed Redis Cache - 根据模式获取键

c# - 如何检测 webview2 中的鼠标点击(c#/vb.net)

c# - e.NewWindow = (CoreWebView2)sender 仍然会产生单独的实例

c# - 如何在 Webview2 中使用透明度?