所以这让我疯狂了一天。我试图在xamarin.android上与REST API交谈但由于某种原因我收到此错误:
InnerException {Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.RemoteValidation (Mono.Security.Protocol.Tls.ClientContext context, AlertDescription description) [0x00000] in :0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in :0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 () [0x00000] in :0 at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000] in :0 at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in :0 at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in :0 } Mono.Security.Protocol.Tls.TlsException
经过一番研究后,我发现这与我正在谈话的服务器上丢失的证书有关(如果我错了,请纠正我)。所以我将SSL证书添加到Mac上的钥匙串中。我还运行了Mozilla命令来安装默认证书。
不幸的是,这仍然不起作用。在Windows上,与API的连接就像一个魅力。从我读到的这是因为Windows有自己的CA商店和一些默认证书。
答案 0 :(得分:5)
我遇到了和你一样的问题,在我的情况下,我实际上设法弄清楚我有一个证书名称 - 错误匹配。我不知道如何解决的问题,因为它不是我要求数据的服务器。
我到目前为止使用的开发解决方案是压缩所有SLL,并使用以下代码接受所有SLL:
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
(
(srvPoint, certificate, chain, errors) => true
);
或稍短一点
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
然而,请注意,这不是问题的解决方案,而只是一种解决方案,因此您可以继续开发。
我希望这可以帮助你,你现在可以了解这个令人讨厌的例外: - )