【问题标题】:Invalid certificate received from server xamarin.android从服务器 xamarin.android 收到的无效证书
【发布时间】:2015-04-01 07:22:16
【问题描述】:

所以这让我疯狂了 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] in :0 at 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 存储和一些默认证书。

【问题讨论】:

    标签: c# ssl mono xamarin xamarin.android


    【解决方案1】:

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

    到目前为止,我使用的开发解决方法是取消所有 SLL,并使用以下代码接受所有内容:

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

    或者更短一点

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

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

    我希望这对您有所帮助,并且您现在可以了解这个令人讨厌的异常 :-)

    【讨论】:

    • 感谢 Honnes 周围的工作。我们暂时删除了与有问题的服务的连接。这很奇怪,因为在我们自己的服务器上运行它就可以了。希望很快会有解决方案。
    • 甚至更短 - 类型推断足以推断出 RemoteCertificateValidationCallback 因此 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
    猜你喜欢
    • 2017-09-18
    • 2017-06-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多