Cordova应用程序中的HTTP加载失败(kCFStreamErrorDomainSSL,-9813)

Mar*_*idy 18 iphone jquery xcode ios cordova

我使用Cordova 3.2和jquery mobile 1.3创建了一个iOS应用程序.我使用jquery ajax将请求发送到RESTfull服务以检索/更新信息.

我有许多测试设备,各种iPhone,各种不同的iOS版本.在运行iOS 7的iPhone 4S上,当发送任何ajax请求时,我收到以下错误:

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
Run Code Online (Sandbox Code Playgroud)

这只发生在这台设备上,在另一台运行iOS 7的iPhone 4S上,它运行得非常好,就像我正在使用的所有其他测试设备一样.

我已经读过,这表明证书在某种程度上是无效的,在这种情况下,这可以被忽略,为什么会影响一台设备?

任何人都可以建议为什么会发生这种情况,以及阻止它仅在我的某个设备上工作的设备有什么不同.谢谢

Mar*_*kiv 33

我有一个类似的问题,但在我的情况下,所有设备都曾经发生这种情况,并且只能在使用https的ajax调用期间发生.

如果是这种情况,在appDelegate.m文件末尾添加以下代码可以缓解您的问题.

@implementation NSURLRequest(DataController) 
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
return YES; 
} 
@end 
Run Code Online (Sandbox Code Playgroud)

但我怀疑如果它在其他设备上工作,我给出的解决方案可能没有效果.但是试一试.

  • 非常有用于测试目的(我只是设置我们的生产服务器的克隆来重现问题,它显然使用与我们的真实站点不同的域,因此其SSL证书无效).但是,从来没有在生产代码中这样做 - 它与不使用SSL一样好. (9认同)

Ark*_*ito 12

如果它在某些设备而不是其他设备上运行,那么这些设备的证书验证参数会有所不同.以下是一些需要注意的事项:

  1. 这些快乐的设备是否有一些根本证书,不满意的设备没有?特别是如果它们运行不同的iOS版本,它们也可能具有不同的可信证书列表.尝试转到设置>常规>关于并比较最底部的"信任存储"的数字.在这里查看更多信息.
  2. 您是否在过去的某个时间点在快乐的设备上手动接受了一些中间证书(用于签署此证书)?*
  3. 不愉快的设备上的日期/时间是否错误?如果将其设置为证书到期日期之后或证书颁发日期之前的时间,它将拒绝它.我总是用这个拍摄自己的脚!

如果您在不愉快的设备上的浏览器中访问您的端点URL,它会给您带来什么错误?(注意:显然你的服务器也会给你一些错误,因为你没有请求正确的标题和参数.我在谈论Safari本身 - 它应该提供一个更详细的信息,关于它(它认为)是什么证书有问题.)

*编辑纠正错误记录的内容:如果您转到Safari中的URL,则无法接受叶证书,如果您尝试直接加载它们,则只能选择接受中间证书.