如何在iOS中处理"CFNetwork SSLHandshake failed"错误

45

有时候我的代码会出现CFNetwork SSLHandshake failed -(9806)的错误,但是我不确定为什么会发生这种情况,因为我的代码在运行时一切正常,除了在iOS 6上运行时,以及在iOS 7 64位系统上运行时会出现此警告。
有人可以建议我如何处理这个问题吗?


3
请停止批量编辑问题。当您在旧问题上进行此操作时,您所做的只是将它们推到时间轴的顶部。这样做会让新问题被推下去,这是不好的。 - Fogmeister
1
@Fogmeister 前天,iOS最活跃的100个问题中有31个是来自Arun_k的问答。 - OGHaza
@Fogmeister 我之前不知道这件事,谢谢你提供的信息。 - Arun_
我假设从你的标签中可以看出,这是在使用NSURLConnection时发生的。请你在问题中明确说明,并指出你在代码中哪里看到了这个错误? - Mike Abdullah
您可能忘记设置[request setHTTPMethod:@"POST"]; - Suhail Bhat
显示剩余2条评论
5个回答

41
通常当我遇到 CFNetwork SSLHandshake failed -(*) 错误时,是因为我的本地 WiFi 网络没有连接到互联网。请尝试在另一个网络上再次尝试(对我来说,3G 是最快的解决方案)。

但是有没有办法处理这个问题,以便我的应用程序不会崩溃。 - Arun_
@JoshK,你能实现一下这部分吗? - Dhaval Bhadania
1
这不会导致你的应用程序崩溃,这只是警告。确保您对所有请求具有强大的可达性。干杯! - Abdul Yasin

11

很好的建议。还有一件事需要补充,这并没有在Steven Peterson的答案中提到。NSTemporaryExceptionRequiresForwardSecrecy的默认值为true,因此您的服务器也应该启用它(这是推荐的修复某些漏洞的方法),或者您应该在iOS应用程序中明确将其设置为false(不推荐)。 - hris.to

6

我曾经遇到过同样的问题,在确认服务器收到了POST请求之后,解决方法如下:

  • 清理项目:Product -> Clean
  • 从iOS设备/iOS模拟器中删除您的应用程序并退出模拟器
  • 编译您的应用程序并运行它

在我的情况下,就这么简单。


2
我有同样的问题,我的解决方案是检查代码中是否写入了


initWithScheme:@"https"

代替
initWithScheme:@"http"

所以请确保使用正确的协议


这并不是我的问题,因为我使用的所有WS都是仅限于HTTPS的。 - Arun_
但是,如果您需要通过https消耗数据会发生什么? - baquiax

-2
另一个解决方案:检查您手机上的日期/时间是否设置正确。 SSL证书有效直到某个特定日期。

https://superuser.com/a/760211


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接