给定
- WPF 应用启动 Kestrel 服务器
- Kestrel 监听
http://0.0.0.0:5000
和https://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/