接受Xamarin Android

时间:2018-09-21 10:42:49

标签: ssl xamarin xamarin.android httpclient

我有一个 Xamarin Forms 项目,并且在MainPage.xaml.cs文件中,我想对服务器执行请求。该服务器是用 ASP.NET Core 2编写的,并使用自签名证书运行。

购买证书不是解决我的问题的方法,因为客户不希望证书而且应用程序仅在LAN中运行。

在我的MainPage.xaml.cs文件中,Http请求如下所示:

HttpClient m_Client = new HttpClient();
var uri = new Uri(myURL);

var response = await m_Client.GetAsync(uri);

if (response.IsSuccessStatusCode)
{
    ...
}

到目前为止,一切都很好。如果我将应用程序放在 Android 上并尝试执行请求,则Android会抛出SSL异常,原因是找不到证书的CA。

如何使用自签名证书与服务器通信?

我查找了问题并找到了很多解决方案,例如:

ServicePointManager
        .ServerCertificateValidationCallback +=
        (sender, cert, chain, sslPolicyErrors) => true;

如果将此代码添加到Android项目中的MainActivity.cs文件中,则它应接受所有证书。但这对我不起作用。看来这种方法永远不会被调用。

关于如何进行交流的任何建议?

致谢

1 个答案:

答案 0 :(得分:2)

一种选择是处理证书,上面的注释中对此进行了讨论。

但是,我认为忽略代码中的证书验证的选项总是更快,而您只需要这样做,

var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
HttpClient client = new HttpClient(handler);

由于某些未知原因,您不能像发现的那样使用ServicePointManager.ServerCertificateValidationCallback的全局事件处理程序,但是HttpClient有自己的处理程序。