与android失败的https连接

时间:2016-12-08 15:18:40

标签: c# android xamarin https xamarin.android

我使用自签名证书并尝试通过https连接到本地服务器。这是我的代码:

在PCL:

    using (HttpClient client = new HttpClient(new ModernHttpClient.NativeMessageHandler(false, true) { ClientCertificateOptions = ClientCertificateOption.Manual, }, false))
    {

        text = await client.GetStringAsync(address);
    }

机器人:

ServicePointManager.ServerCertificateValidationCallback += 
            (sender, certificate, chain, errors) => certificate.GetCertHashString() == "abc123";

永远不会调用回调。当与客户端进行GET时,它会抛出一个异常,该异常为null并且不给我任何信息。这在日志中显示我认为是正常的:

12-08 08:40:43.175 D / NetworkSecurityConfig(5796):未使用平台默认值指定网络安全配置

我使用nougat在我的谷歌像素xl上部署应用程序。我尝试使用6.0版的模拟器,没有运气。我明白了:

12-08 08:50:42.137 D /(1428):HostConnection :: get()建立新主机连接0x99f44ac0,tid 1457 12-08 08:50:42.149 I / OpenGLRenderer(1428):初始化的EGL,版本1.4 12-08 08:50:42.199 W / EGL_emulation(1428):eglSurfaceAttrib未实现 12-08 08:50:42.199 W / OpenGLRenderer(1428):无法在表面0x9b868b60上设置EGL_SWAP_BEHAVIOR,错误= EGL_SUCCESS 12-08 08:50:42.557 D / Mono(1428):DllImport搜索:' __内部' ('(空)&#39)。

这两个设备在GET的同一个地方崩溃。 上面的代码在我的wpf客户端上工作正常。 android有一些我需要设置的特殊标志吗?

日志文件:http://pastebin.com/r3sAvkn6            http://pastebin.com/3GPf7Dqc

2 个答案:

答案 0 :(得分:0)

尝试以下操作。

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object ob, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
            {
                return true;
            };

            using (var httpClient = new HttpClient(new NativeMessageHandler()))
            {
                var tt = await httpClient.GetAsync(uri);
                string tx = await tt.Content.ReadAsStringAsync();
                //Log.Info(TAG, tx);
            }

答案 1 :(得分:0)

问题是NativeMessageHandler。不知怎的,当我切换回HttpClientHandler时,它开始工作了。