我正在使用我们正在开发的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
而在某处失败了。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
使用未签名证书的SSL连接
我怀疑您使用的是自己制作的自签名(不是未签名)证书(例如makecert
)以供临时使用。< / p>
正如其他人在评论中所说的那样,这应该适用于很多人在开发应用程序时做类似的事情。
似乎他忽略了
ServerCertificateValidationCallback
并且失败了。有什么方法可以解决这个问题吗?
Mono(和MonoTouch)支持ServerCertificateValidationCallback
和旧ICertificatePolicy
方法,以允许应用程序在接受(或拒绝)X.509时使用 last 字证书。您可以尝试其他方法 - 但我不确定这是问题。
您还可以将(完整的,非部分的)堆栈跟踪与评论ServerCertificateValidationCallback
的相同代码进行比较。如果错误相同那么它可能与证书相关,否则它不是(SSL / TLS可能出现更多问题; - )
可悲的是,我不能给你更具体的帮助,因为你的问题缺乏重要的细节。
您使用的是什么版本的MonoTouch?
MonoTouch异常的完整堆栈跟踪为您提供了什么?从您提供的部分内容中,并非100%明确表示在验证证书时会出现问题。
您在哪里/如何执行示例代码?例如它是在Mono还是Microsoft .NET?哪个版本?
我建议您打开http://bugzilla.xamarin.com的错误报告(并包含缺失的详细信息),因为我们可能需要更多数据(例如SSL通信的wireshark日志)。