HTTPS发布失败 [英] HTTPS Post failure

查看:179
本文介绍了HTTPS发布失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试向我的Xamarin Forms应用程序上的API发送POST请求,但收到一条错误消息,指示发送请求时不存在信任关系.我不知道这是为什么以及如何解决.例外:

I´m trying to send a POST request to an API on my Xamarin Forms application and I´m getting an error that indicates that there is no trust relationship when sending the request. I cannot find out why is this and how to solve it. This is the exception:

System.Net.Http.HttpRequestException:发送时发生错误 请求---> System.Net.WebException:错误:TrustFailure(The 身份验证或解密失败.)---> System.IO.IOException: 身份验证或解密失败. ---> System.IO.IOException:身份验证或解密失败. ---> Mono.Security.Protocol.Tls.TlsException:从服务器接收到无效的证书.错误代码:0xffffffff800b010f,位于 Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (System.IAsyncResult asyncResult)[0x00031]在 /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:430 在Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar,System.Boolean ignoreEmpty)在[0x00000]中 /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:256 在Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult结果)在[0x00071]中 /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:418 ---内部异常堆栈跟踪的结尾---

System.Net.Http.HttpRequestException: An error occurred while sending the request ---> System.Net.WebException: Error: TrustFailure (The authentication or decryption has failed.) ---> System.IO.IOException: The authentication or decryption has failed. ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010f at Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (System.IAsyncResult asyncResult) [0x00031] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:430 at Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar, System.Boolean ignoreEmpty) [0x00000] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:256 at Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult result) [0x00071] in /Users/builder/jenkins/workspace/xamarin-android/xamarin-android/external/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:418 --- End of inner exception stack trace ---

导致此异常的代码如下:

The code resulting in this exception is the following:

MultipartFormDataContent content = new MultipartFormDataContent();
content.Headers.Add("X-Auth-Token", "eb27c17f-8bd6-4b94-bc4f-742e361b4e6a");
content.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");

content.Add(new ByteArrayContent(myByteImage));

try
{
    HttpResponseMessage response = await _client.PostAsync("https://10.54.66.160:9000/3/matching/search?list_id=3c9f2623-28be-435f-a49f-4dc29c186809&limit=1", content);

    string responseContent = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
    throw;
}

推荐答案

看来,问题解决了,将以下代码放在MainActivity.cs

It seems the problem solved putting the following code on MainActivity.cs

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
            (sender, cert, chain, sslPolicyErrors) =>
            {
                if (cert != null) System.Diagnostics.Debug.WriteLine(cert);
                return true;
            };

如@ DanielA.White似乎HttpClient的mono实现不支持自签名证书.

As @DanielA.White It seems that the mono implementation of HttpClient does not support self signed certificates.

这篇关于HTTPS发布失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆