【问题标题】:Accept self-signed certificates in Xamarin Android在 Xamarin Android 中接受自签名证书
【发布时间】:2018-09-21 10:42:48
【问题描述】:

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

购买证书并不能解决我的问题,因为客户不希望它和应用程序只在局域网中运行。

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

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

var response = await m_Client.GetAsync(uri);

if (response.IsSuccessStatusCode)
{
    ...
}

到目前为止一切顺利。如果我将应用程序带到 Android 上并尝试执行请求,Android 会因找不到我的证书的 CA 而引发 SSL 异常。

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

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

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

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

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

问候

【问题讨论】:

  • 它没有回答你的问题,但是禁用 HTTPS 怎么样? stackoverflow.com/questions/50935730/…
  • @CSharpRocks 是的,这将是我最后的选择 :)
  • 您可以从一些证书颁发机构免费获得 SSL 证书:仅举一个例子:letsencrypt.org
  • @SushiHangover 是的,但我不是必须输入域名之类的吗?我没有,服务器在局域网上运行..

标签: ssl xamarin xamarin.android httpclient


【解决方案1】:

一种选择是处理证书,这已在上面的 cmets 中讨论过。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 2017-11-02
    • 2017-04-18
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多