首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSL证书验证在Xamarin循环8中失败(在Android和iOS上)

SSL证书验证在Xamarin循环8中失败(在Android和iOS上)
EN

Stack Overflow用户
提问于 2016-09-20 13:25:49
回答 2查看 939关注 0票数 1

我们最近将我们的Xamarin工具更新为周期8

在更新后执行的常规测试中,我们很快注意到对基于WCF的服务器组件的所有HTTPS请求都失败了。我们仍然有旧版本的设备,它们运转良好。新编译的版本都无法连接。

连接异常通常归结为一个Mono.Security.Protocol.Tls.TlsException,表示从服务器接收到的无效证书(错误代码:0 xffffff800b010f)。

调查

为了进行研究,我们定义了一个ServerCertificateValidationCallback并查看了SslPolicyErrors。在那里我们注意到:

  • 在Android上,我们总是有SslPolicyErrors.RemoteCertificateNameMismatch
  • 在iOS上,我们总是能得到SslPolicyErrors.RemoteCertificateChainErrors

我们对几个领域进行了测试,错误总是如上面所列。但是,这些域(您也可以在ServerCertificateValidationCallback中看到)提供的证书都是正确和有效的。

我只能假设它们是有效的,因为旧的应用程序仍然可以连接,因为在浏览器中打开这些URL表示证书很好,而且SSL实验室等测试工具为这些域提供了A/A+的分数。

我们试过的

谷歌搜索发现了一些建议改变我们使用的HTTP的帖子。但是,连接到WCF服务器的代码是使用ServiceModel.ClientBaseBasicHttpBinding自动生成的web引用。我不知道它在幕后使用的是什么HTTP,我也不认为我们可以轻易地改变它。无论如何,我会假设这应该是开箱即用的,就像在更新之前一样。

在这个Xamarin发布周期中,TLS API发生了一些变化。其他一些Xaramin论坛文章建议更改iOS构建选项SSL/TLS实现和HttpClient实现。我们尝试了几个排列,但它们都产生了相同的错误。我们在Android HttpClient实现设置中也进行了同样的尝试。没有结果。

解决办法

因此,我们暂时关闭了证书验证:

代码语言:javascript
复制
ServicePointManager.ServerCertificateValidationCallback += () =>
{
    return true;
};

还有其他人在经历这种事吗?有人有解决办法吗?我们做错什么了吗?

编辑

这是 Mono.Security中的一个bug。有关官方错误报告,请参见这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-20 15:34:38

Xamarin.iOS版本: 10.0.0.6散列:6c3fin4分支: xcode8

托管HttpClient提供程序被破坏(再次)。

解决办法:

HttpClient implementation构建下,更改您的iOS

  • 来自Managed (default)
  • 转到NSUrlSession (iOS 7+)

样本核实:

代码语言:javascript
复制
var webView = new WKWebView(new CGRect(40, 100, 400, 400), new WKWebViewConfiguration());
Add(webView);
var button = new UIButton(UIButtonType.System);
button.Frame = new CGRect(40, 40, 100, 40);
Add(button);
button.SetTitle("Fetch", UIControlState.Normal);
button.TouchUpInside += async (object sender, EventArgs e) =>
{
    var client = new HttpClient();
    var response = await client.GetAsync("https://sni.velox.ch");
    webView.LoadHtmlString(new NSString(await response.Content.ReadAsStringAsync()), new NSUrl(""));
};

Managed Provider

代码语言:javascript
复制
TlsException: The authentication or decryption has failed.

NSUrlSession (iOS 7+)

代码语言:javascript
复制
(Successful url fetch)
票数 0
EN

Stack Overflow用户

发布于 2016-09-24 00:50:26

对于交叉引用,该“从服务器接收的无效证书”问题已被提交给Mono:bug.cgi?id=44708进行调查。

此bug影响Mono、Xamarin.Android、Xamarin.iOS和Xamarin.Mac。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39595422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档