【发布时间】:2021-02-05 20:57:05
【问题描述】:
我在 Android 应用程序上的 Xamarin 应用程序出现 SSL 错误不受信任(iOS 运行良好)。我需要使用 Webview。
我按照 httpclient 的说明操作:https://thomasbandt.com/certificate-and-public-key-pinning-with-xamarin。我需要设置 TrustManagerFactory、KeyManagerFactory 和 KeyStore,但在 WebViewRenderer 和 WebViewClient 中我找不到将我的证书添加为受信任的选项。我不想比较 OnReceivedSslError 覆盖方法中的证书,因为此方法中的证书是最终证书(有效期最长为一年)。我想在 webview 中检查证书方法之前将我的根证书和中间证书添加到受信任的证书列表中。
导出渲染器:
public class CustomWebView : WebViewRenderer
{
private TrustManagerFactory _trustManagerFactory;
private KeyManagerFactory _keyManagerFactory;
private KeyStore _keyStore;
public CustomWebView(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
var customWebViewClient = new CustomWebViewClient();
_trustManagerFactory = CertificateHelper.TrustManagerFactory;
_keyManagerFactory = CertificateHelper.KeyManagerFactory;
_keyStore = CertificateHelper.KeyStore;
Control.SetWebViewClient(customWebViewClient);
}
}
}
这里如何设置 TrustManagerFactory、KeyManagerFactory 和 KeyStore?
【问题讨论】:
-
您可以让 HttpsURLConnection 信任一组特定的 CA。请检查本机 android 中的建议。 developer.android.com/training/articles/…
-
我已经检查了这条路径,但是我看不到如何获取 webview 或 webview 客户端的核心机制来修改 SSL 工厂或覆盖任何方法。第二件事是,此解决方案执行 Load(null, null) 进行初始化并清除默认信任的所有 CA,因此只有我添加的自定义证书才会被信任。换句话说,如果我不添加任何证书,那么所有 https 连接都将不受信任。那不是我想要的。第三件事 - 即使我修改了 urlconnection 的 SSL 工厂,我也只更改了我想要的未引用 webview 的对象
标签: xamarin xamarin.forms xamarin.android