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

Invalid certificate received from server xamarin.android

这让我疯狂了 1 天。我正在尝试与 xamarin.android 上的 REST API 交谈,但由于某种原因我收到此错误:

InnerException {Mono.Security.Protocol.Tls.TlsException:无效
从服务器收到的证书。错误代码:0xffffffff800b010a 在
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]
在 :0 在
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] in :0
} Mono.Security.Protocol.Tls.TlsException

经过一些研究,我发现这与我正在与之通话的服务器缺少证书有关(如果我错了请纠正我)。所以我将 SSL 证书添加到我 Mac 上的钥匙串中。我还 运行 安装默认证书的 Mozilla 命令。

不幸的是,这仍然不起作用。在 windows 上,与 API 的联系就像一个魅力。据我了解,这是因为 windows 拥有自己的 CA 存储区和一些默认证书。

我遇到了和你一样的问题,就我而言,我实际上设法弄清楚我的证书名称不匹配。我不知道如何解决,因为我请求数据的不是我的服务器。

到目前为止,我使用的开发变通方法是抑制所有 SLL,并使用以下代码接受所有存在的内容:

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

或短一点

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

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

我希望这对您有所帮助,您现在可以暂时忘记这个令人讨厌的异常:-)