【问题标题】:SSL connection with unsigned certificate带有未签名证书的 SSL 连接
【发布时间】: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


【解决方案1】:

使用未签名证书的 SSL 连接

我怀疑您正在使用您自己制作的自签名(不是未签名)证书(例如makecert)用于临时使用。

就像其他人在 cmets 中所说的那样,这应该会起作用,因为许多人在开发他们的应用程序时都在做类似的事情。

似乎他忽略了ServerCertificateValidationCallback 并且在某处失败了。有没有办法解决这个问题?

Mono(和 MonoTouch)支持ServerCertificateValidationCallback 和旧的ICertificatePolicy 方法,以允许应用程序在接受(或拒绝)X.509 证书时有最后字。您可以尝试其他方法 - 但我不确定这是否是问题所在。

您还可以将您的(完整的,而不是部分的)堆栈跟踪与注释ServerCertificateValidationCallback 的相同代码进行比较。如果错误是相同,那么它可能与证书有关,否则不是(SSL/TLS 可能会出现更多问题;-)

很遗憾,我无法为您提供更具体的帮助,因为您的问题缺乏重要的细节。

  • 您使用的是哪个版本的 MonoTouch?

  • MonoTouch 为您提供的异常的完整堆栈跟踪?从您提供的部分内容来看,并不是 100% 清楚在验证证书时会出现问题。

  • 您在何处/如何执行示例代码?例如是在 Mono 还是 Microsoft .NET 上?哪个版本?

我建议您打开关于 http://bugzilla.xamarin.com 的错误报告(并包括缺失的详细信息),因为我们可能需要更多数据(例如 SSL 通信的 wireshark 日志)。

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2015-06-18
    • 2021-10-22
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多