我有一个 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文件中,则它应接受所有证书。但这对我不起作用。看来这种方法永远不会被调用。
关于如何进行交流的任何建议?
致谢
答案 0 :(得分:2)
一种选择是处理证书,上面的注释中对此进行了讨论。
但是,我认为忽略代码中的证书验证的选项总是更快,而您只需要这样做,
var handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
HttpClient client = new HttpClient(handler);
由于某些未知原因,您不能像发现的那样使用ServicePointManager.ServerCertificateValidationCallback
的全局事件处理程序,但是HttpClient
有自己的处理程序。