C# 从服务器xamarin.android接收到无效证书

C# 从服务器xamarin.android接收到无效证书,c#,ssl,mono,xamarin,xamarin.android,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.TlsServerC

这让我疯狂了一天。我正在尝试与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 InnerException{Mono.Security.Protocol.Tls.TlsException:无效 从服务器接收到证书。错误代码:0xFFFFFF800B010A位于 Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.RemoteValidation (Mono.Security.Protocol.Tls.ClientContext上下文,AlertDescription 说明)[0x00000]位于:0处 Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection证书)[0x00000] in:0 at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1 ()[0x00000]英寸:0英寸 Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process() [0x00000]英寸:0英寸 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]输入:0 }Mono.Security.Protocol.Tls.TlsException 经过一些研究,我发现这与我正在交谈的服务器丢失的证书有关(如果我错了,请纠正我)。因此,我将SSL证书添加到Mac上的密钥链中。我还运行了Mozilla命令来安装默认证书


不幸的是,这仍然不起作用。在windows上,与API的连接就像一个符咒。据我所知,这是因为windows有自己的CA存储和一些默认证书。

我遇到了与您相同的问题,在我的情况下,我实际上设法找出了一个certificatename不匹配的问题。我不知道如何解决这个问题,因为我请求数据的不是我的服务器

到目前为止,我使用的一种开发方法是超越所有SLL,并使用以下代码接受所有SLL:

                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback
                (
                    (srvPoint, certificate, chain, errors) => true
                );
或者再短一点

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
但是,请注意,这并不是问题的解决方案,而只是一个解决方案,这样您就可以继续开发


我希望这能帮你解决这个问题,你也能暂时忘掉这个令人讨厌的例外情况:-)

谢谢你为Honnes做的工作。我们暂时删除了与有问题的服务的连接。这很奇怪,因为在我们自己的服务器上运行它就可以了。希望很快就会有一个解决方案。即使是更短的类型推断也足以推断出
RemoteCertificateValidationCallback
,因此
ServicePointManager.ServerCertificateValidationCallback=delegate{return true;}