Android WebView不识别手动安装证书,Xamarin Forms Navigating事件失效求助
问题背景
- 在Xamarin Forms应用中使用
WebView加载包含内网HTTPS资源的生成HTML,这些资源由自签名根证书提供TLS加密保护 - 根证书已安装到Android设备,谷歌Chrome可正常访问对应资源,但WebView访问时出现SSL错误(错误码3,证书不可信)
- 测试时自定义
WebViewClient并重写OnReceiveSslError方法,手动校验并允许自签名证书(调用handler.Proceed()),解决了SSL问题,但引发新问题:Xamarin.Forms.WebView的Navigating事件不再触发
核心疑问
- Android的
WebView与谷歌Chrome是否使用不同的证书存储? - 有没有无需创建WebView自定义渲染器的修复方案,避免引入Navigating事件失效这类潜在问题?
补充更新信息
Navigating事件失效细节
在XAML中绑定Navigating事件后,为WebView分配自定义渲染器,在OnElementChanged方法中通过SetWebViewClient设置自定义WebViewClient——无论是否重写OnReceiveSslError,都会导致Navigating事件失效。相关代码如下:
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e) { base.OnElementChanged(e); if (e.NewElement != null) { Control.SetWebViewClient( new BreakingWebViewClient() ); } } class BreakingWebViewClient : WebViewClient{ // 即使无任何业务代码,仅继承WebViewClient也会导致Navigating事件失效 }
证书识别问题细节
使用HtmlWebViewSource为WebView加载自定义HTML,其中嵌入的图片引用了受OpenSSL自签名根证书保护的内网HTTPS资源。将根证书通过用户证书小程序安装到Android证书存储后,Chrome等客户端可正常访问该HTTPS资源,但WebView仍无法识别该证书;在重写OnReceiveSslError时,SslError参数中能获取到该证书,但WebView不予认可。
内容的提问来源于stack exchange,提问作者HCL
相关产品推荐
相关产品推荐

