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

Flo*_*aal 3 c# mono ssl xamarin.android xamarin

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

小智 5

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

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

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
                (
                    (srvPoint, certificate, chain, errors) => true
                );
Run Code Online (Sandbox Code Playgroud)

或者更短一些

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
Run Code Online (Sandbox Code Playgroud)

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

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