【问题标题】:Xamarin/Mono TLS ExceptionXamarin/单声道 TLS 异常
【发布时间】:2017-06-25 17:08:34
【问题描述】:

我正在整理一个 Xamarin Android 项目,并尝试构建一个调用 API 的小应用程序。 Xamarin 项目创建了一个 ApiWrapper 类的实例,我在另一个解决方案中拥有该类,该类是进行 Http 调用的原因(不确定这是否重要)。

我在运行时不断获取的堆栈跟踪粘贴在下面:

06-25 12:36:13.696 E/mono-rt (3365): [错误] 致命的未处理异常: System.Net.Http.HttpRequestException:发送时出错 请求

System.Net.WebException: Error: SecureChannelFailure(认证或解密失败。)

System.IO.IOException:身份验证或解密失败。

System.IO.IOException:身份验证或解密失败。

Mono.Security.Protocol.Tls.TlsException:认证或解密失败。

这是我迄今为止尝试过的:

  1. 我尝试安装 ModernHttpClient 并将 NativeMessageHandler 传递到 HttpClient() 的构造函数中,但没有成功。
  2. 确保我的应用具有 INTERNET 权限
  3. 添加了一个自定义验证器类,它返回 true 并被传递到 ServicePointManager.ServerCertificateValidationCallback
  4. 同时运行 mozrootscert-sync 以尝试为该站点提取正确的证书。

另外,为了清楚起见,我有一个测试项目,它仅通过 .NET 的网络堆栈调用相同的 ApiWrapper 类,并且它在加密方面没有问题并且工作正常。

我没有想法,在这里苦苦挣扎。任何建议都非常有帮助!谢谢。

【问题讨论】:

  • 您要连接的站点是否仍然启用了 tls1.0?错误听起来像是期待 tls1.1 或 1.2。
  • 嗯,我不确定。有什么好工具可以检查网站使用的 tls 版本吗?
  • 你可以使用this
  • 谢谢!我使用@ganchito55 提到的站点进行了测试,该站点似乎支持 TLS 1.0、1.1 和 1.2。关于为什么会发生这种情况的任何其他想法?
  • 您使用自签名证书吗?

标签: c# xamarin https xamarin.android mono


【解决方案1】:

我遇到了同样的问题。集成测试能够调用服务并通过,但从 Android 模拟器运行代码会引发该错误。还尝试了您上面概述的所有步骤。

最终对我有用的是更改 Android 项目的设置。右键单击项目,然后单击属性。转到 Android 选项,然后单击高级按钮。

设置..

HttpClient 实现 -> Android

SSL/TLS 实施 -> 原生 TLS 1.2+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2015-06-29
    • 1970-01-01
    • 2012-10-31
    • 2019-10-02
    相关资源
    最近更新 更多