从服务器xamarin.android收到的证书无效

时间:2015-02-02 10:56:27

标签: c# ssl mono xamarin xamarin.android

所以这让我疯狂了一天。我试图在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商店和一些默认证书。

1 个答案:

答案 0 :(得分:5)

我遇到了和你一样的问题,在我的情况下,我实际上设法弄清楚我有一个证书名称 - 错误匹配。我不知道如何解决的问题,因为它不是我要求数据的服务器。

我到目前为止使用的开发解决方案是压缩所有SLL,并使用以下代码接受所有SLL:

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
                (
                    (srvPoint, certificate, chain, errors) => true
                );

或稍短一点

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });

然而,请注意,这不是问题的解决方案,而只是一种解决方案,因此您可以继续开发。

我希望这可以帮助你,你现在可以了解这个令人讨厌的例外: - )