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)
但是,请注意,这不是问题的解决方案,而只是一个解决方案,因此您可以继续开发.
我希望这可以帮助你,你现在可以了解这个令人讨厌的例外:-)