Android 和 IOS 的 Xamarin PCL 自签名证书

Xamarin PCL self signed certificat for Android and IOS

我正在尝试将完整的 Rest 服务从 http 传递到 https。

我创建了一个自签名证书,我将其用于 IIS Express。我在 google Chrome 上验证了它,它与邮递员一起工作得很好。我的休息服务在 http 和 https 中工作。

我使用 PCL 项目(IOS 和 Android)http 请求一切正常,但 https 请求有异常。异常消息为空。

我尝试直接从 Visual Studio 2015 创建测试证书,但该按钮在属性 -> 签名中被禁用。

我还尝试将我的自签名证书安装为受信任的根,但我的模拟器和其余服务之间的通信没有成功。

我的代码

public partial class MainPage : ContentPage
{
    private string url = string.Empty;
    private HttpClient _client;


    public MainPage()
    {
        InitializeComponent();
        switch (Device.RuntimePlatform)
        {
            case Device.iOS:
                _client = new HttpClient(new NSUrlSessionHandler());
                break;
            case Device.Android:
                _client = new HttpClient();
                break;
        }
        _client = new HttpClient();
        test();


    }

    private async void test()
    {
        //url = "http://192.168.1.106:9630/PrototypeB.svc/Test";
        url = "https://192.168.1.106:44301/PrototypeB.svc/Test";
        try
        {
            var _content = await _client.GetStringAsync(url);
            List<Test> _posts = JsonConvert.DeserializeObject<List<Test>>(_content);
        }
        catch (HttpRequestException e)
        {
            string test = e.Message;
        }
        catch (Exception e)
        {
            string test = e.Message;
        }
    }
}

如何使用 https 和自签名证书与我的 Android 和 IOS 模拟器通信?

您可以使用ServicePointManager忽略证书验证检查。

像这样在 iOS 和 Android 平台中执行代码:

System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { 
                         return true; 
                     };

参考文献:

此外,ModernHttpClient Pro提供此功能,但不是免费的。