Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf Xamarin第8周期中SSL证书验证失败(在Android和iOS上)_Wcf_Ssl_Xamarin - Fatal编程技术网

Wcf Xamarin第8周期中SSL证书验证失败(在Android和iOS上)

Wcf Xamarin第8周期中SSL证书验证失败(在Android和iOS上),wcf,ssl,xamarin,Wcf,Ssl,Xamarin,我们最近将Xamarin工具更新为 在更新后执行的例行测试中,我们很快注意到,对基于WCF的服务器组件的所有HTTPS请求都失败了。我们仍然有旧版本的设备,它们工作正常。新编译的版本都无法连接 连接异常总是归结为一个Mono.Security.Protocol.Tls.TlsException表示从服务器收到的无效证书(错误代码:0xFFFFFF800B010F) 调查 为了进行调查,我们定义了一个。在那里,我们注意到: 在Android上,我们总是得到SslPolicyErrors.Remo

我们最近将Xamarin工具更新为

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

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

调查 为了进行调查,我们定义了一个。在那里,我们注意到:

  • 在Android上,我们总是得到SslPolicyErrors.RemoteCertificateMatch
  • 在iOS上,我们总是得到SslPolicyErrors.RemoteCertificateChaineErrors
我们在几个域上进行了测试,错误总是如上面所列。但是,这些域提供的证书(您也可以在
服务器CertificateValidationCallback
中看到)都是正确有效的

我只能假设它们是有效的,因为旧的应用程序仍然可以连接,因为在浏览器中打开这些URL表示证书是可以的,并且因为测试工具(例如,为这些域提供a/a+分数)

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

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

变通办法 因此,我们暂时关闭了证书验证:

ServicePointManager.ServerCertificateValidationCallback += () =>
{
    return true;
};
还有其他人经历过这种情况吗?有人有解决办法吗?我们做错什么了吗

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

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

托管HttpClient提供程序已断开(再次)

解决方法: 在iOS构建下,更改您的HttpClient实现:

  • Managed(默认)
  • 至NSUrlSession(iOS 7+)
样品验证:
托管提供商
NSUrlSession(iOS 7+)

为了进行交叉引用,Mono团队现已针对“从服务器收到的无效证书”问题提交了一个bug,以供调查:


此错误会影响Mono、Xamarin.Android、Xamarin.iOS和Xamarin.Mac。

我有与上面发布的问题和解决方法完全相同的问题,仅在升级后才会发生。目前正在研究其他解决办法。我正在使用现代HttpClient。
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(""));
};
TlsException: The authentication or decryption has failed.
(Successful url fetch)