Xamarin webview Android SSL 错误不受信任 - 如何添加受信任的证书
Xamarin webview Android SSL error untrusted - how to add trusted certificate
我的 adroid 应用程序上的 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?
我终于找到了可行的解决方案。在我的例子中,添加最终用户证书或中间证书(单独或一起)使一切正常。最终用户证书是短期的,所以我建议添加长期中间证书。
添加:
android:networkSecurityConfig="@xml/network_security_config"
在申请部分体现。
将新的 xml 文件(构建操作 AndroidResource)添加到资源 -> xml -> network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/untrusted_ca"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
证书名称只能由小写字母、数字和下划线组成。
在资源 -> 原始 -> untrusted_ca.pem
中添加证书(构建操作:AndroidResource)
现在 android webview 在应用程序级别信任服务器,因此当连接到特定服务器时不再发生 ssl 错误。
我的 adroid 应用程序上的 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?
我终于找到了可行的解决方案。在我的例子中,添加最终用户证书或中间证书(单独或一起)使一切正常。最终用户证书是短期的,所以我建议添加长期中间证书。
添加:
android:networkSecurityConfig="@xml/network_security_config"
在申请部分体现。
将新的 xml 文件(构建操作 AndroidResource)添加到资源 -> xml -> network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="@raw/untrusted_ca"/>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
证书名称只能由小写字母、数字和下划线组成。
在资源 -> 原始 -> untrusted_ca.pem
中添加证书(构建操作:AndroidResource)现在 android webview 在应用程序级别信任服务器,因此当连接到特定服务器时不再发生 ssl 错误。