【发布时间】:2012-01-14 20:48:30
【问题描述】:
我正在开发的 iOS 应用程序遇到以下问题。在我的服务器上,我正在运行 WCF 服务。此服务在 HTTPS 中运行。我写了一个小测试程序,看看我是否可以从另一台 PC 连接到它:
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
Console.WriteLine("Press key to start webrequest");
Console.ReadKey();
WebRequest wr = WebRequest.Create("https://<serveraddress.here.com>");
Stream stream = wr.GetResponse().GetResponseStream();
Console.WriteLine(new StreamReader(stream).ReadToEnd());
Console.ReadKey();
这按预期工作并返回 html 代码。请注意,我们使用ServicePointManager.ServerCertificateValidationCallback 来确保证书在任何情况下都是受信任的。
iPhone 上 MonoTouch 中的相同代码返回以下错误:
System.Net.WebException has been thrown
Error getting response stream (Write: BeginWrite failure): SendFailure
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
连接到另一个已签名的 https 站点(例如 paypal)可以正常工作。在没有 https(常规 http)的情况下连接到服务器也可以正常工作。
似乎它忽略了ServerCertificateValidationCallback 并且在某处失败了。有没有办法解决这个问题?
【问题讨论】:
-
捕获 WebException 并获取更详细的消息。也许它与 SSL 无关,或者详细的消息将有助于说明 SSL 失败的原因。
-
我希望目的是用检查的东西替换
ServerCertificateValidationCallback函数,例如证书指纹值对照您知道有效的列表? -
思路是及时拿到签名证书。出于测试目的,使用了验证回调。
-
我已经在 Monotouch 中成功地使用了相同的方法,所以除非它在最近的 MT 版本中出现问题,否则我真的看不出有什么问题。如果应用程序真正到达您的服务器以及您的服务器响应什么,您能否检查您的服务器日志?
-
是的,但这并不能改变这样的事实:) 顺便说一下,WebException 并没有提供更多信息。 (作为下面评论的答案)。 2
标签: iphone ssl xamarin.ios certificate ios-simulator