绕过 WebView2 中显示的红隼服务器的无效 SSL 证书



给定

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

结果

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

问题

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

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

换句话说,必须有比本文中描述的更简单的方法。

茶隼

公共类网络服务器 { 公共静态任务运行(( { var configuration = new ConfigurationBuilder((。构建((; var urls = new[] { "http://0.0.0.0:7000", "https://0.0.0.0:8000" }; var 环境 = 虚拟主机 .CreateDefaultBuilder(new string[0]( .使用配置(配置( .使用网址(urls( .UseContentRoot(Directory.GetCurrentDirectory((( .使用IISIntegration(( .使用启动((; 返回环境。构建((。RunAsync((; } } 公共类网络启动 { public IConfiguration Configuration { get; } 公共网络启动(配置( { 配置 = 配置; } public void ConfigureServices(IServiceCollection services( { 服务业。AddSpaStaticFiles(configuration => { 配置。根路径 = "索引.html"; }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env( { .app。UseDeveloperExceptionPage((; .app。UseHsts((; .app。使用HttpsRedirection((; .app。使用静态文件((; .app。使用SpaStaticFiles((; } }

WPF 中的 WebView2 控件

公共主窗口(( { WebServer.Run((; 初始化组件((; WebView.Source = new Uri("https://127.0.0.1:6000/index.html"(;HTTP on 5000 有效,HTTPS 6000 - 否 WebView.NavigationDone += (Object sender, CoreWebView2NavigationCompleteEventArgs args( => { WebView.InvalidateVisual((; }; }

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

作为解决方法,您可以尝试使用 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);

相关内容

  • 没有找到相关文章

最新更新