我们最近将我们的Xamarin工具更新为周期8。
在更新后执行的常规测试中,我们很快注意到对基于WCF的服务器组件的所有HTTPS请求都失败了。我们仍然有旧版本的设备,它们运转良好。新编译的版本都无法连接。
连接异常通常归结为一个Mono.Security.Protocol.Tls.TlsException,表示从服务器接收到的无效证书(错误代码:0 xffffff800b010f)。
调查
为了进行研究,我们定义了一个ServerCertificateValidationCallback并查看了SslPolicyErrors。在那里我们注意到:
我们对几个领域进行了测试,错误总是如上面所列。但是,这些域(您也可以在ServerCertificateValidationCallback中看到)提供的证书都是正确和有效的。
我只能假设它们是有效的,因为旧的应用程序仍然可以连接,因为在浏览器中打开这些URL表示证书很好,而且SSL实验室等测试工具为这些域提供了A/A+的分数。
我们试过的
谷歌搜索发现了一些建议改变我们使用的HTTP的帖子。但是,连接到WCF服务器的代码是使用ServiceModel.ClientBase和BasicHttpBinding自动生成的web引用。我不知道它在幕后使用的是什么HTTP,我也不认为我们可以轻易地改变它。无论如何,我会假设这应该是开箱即用的,就像在更新之前一样。
在这个Xamarin发布周期中,TLS API发生了一些变化。其他一些Xaramin论坛文章建议更改iOS构建选项SSL/TLS实现和HttpClient实现。我们尝试了几个排列,但它们都产生了相同的错误。我们在Android HttpClient实现设置中也进行了同样的尝试。没有结果。
解决办法
因此,我们暂时关闭了证书验证:
ServicePointManager.ServerCertificateValidationCallback += () =>
{
return true;
};还有其他人在经历这种事吗?有人有解决办法吗?我们做错什么了吗?
编辑
这是 Mono.Security中的一个bug。有关官方错误报告,请参见这里。
发布于 2016-09-20 15:34:38
Xamarin.iOS版本: 10.0.0.6散列:6c3fin4分支: xcode8
托管HttpClient提供程序被破坏(再次)。
解决办法:
在HttpClient implementation构建下,更改您的iOS
Managed (default)NSUrlSession (iOS 7+)样本核实:
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
TlsException: The authentication or decryption has failed.NSUrlSession (iOS 7+)
(Successful url fetch)发布于 2016-09-24 00:50:26
对于交叉引用,该“从服务器接收的无效证书”问题已被提交给Mono:bug.cgi?id=44708进行调查。
此bug影响Mono、Xamarin.Android、Xamarin.iOS和Xamarin.Mac。
https://stackoverflow.com/questions/39595422
复制相似问题