Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 在Xamarin Android中接受自签名证书_Ssl_Xamarin_Xamarin.android_Httpclient - Fatal编程技术网

Ssl 在Xamarin Android中接受自签名证书

Ssl 在Xamarin Android中接受自签名证书,ssl,xamarin,xamarin.android,httpclient,Ssl,Xamarin,Xamarin.android,Httpclient,我得到了一个Xamarin表单项目,在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_Clie

我得到了一个Xamarin表单项目,在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文件中,它应该接受所有证书。但这对我不起作用。似乎从未调用过此方法

如何进行沟通,有什么建议吗


关于

一个选项是处理证书,这已在上面的评论中讨论过

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

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

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

它不回答您的问题,但禁用HTTPS如何@是的,这将是我最后的选择:)您可以从一些证书颁发机构免费获得SSL证书:仅举一个例子:@SushiHangover是的,但我不是必须输入类似域名的内容吗?我没有,服务器是在局域网上运行的。。