NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)错误不是在所有 iPhone 上?

Posted

技术标签:

【中文标题】NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)错误不是在所有 iPhone 上?【英文标题】:NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) error not on all iPhones? 【发布时间】:2016-11-02 14:59:31 【问题描述】:

我的一个应用程序无法连接到它的 API 服务器。记录的原因是NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)。到目前为止,找不到原因或什么,但最令人沮丧的是,这个问题出现在我的一些测试设备上。在其他一切都很好。我正在使用NSURLConnection:sendSynchronousRequest:returningResponse:error:,但经过一些重构并尝试使用NSURLSessionDataTask:dataTaskWithRequest:completionHandler:,问题仍然存在。 还添加了

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler

    completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);

还是什么都没有.....

附言尽管我的第一个问题与许多其他问题重复,但我主要担心的是为什么此错误仅出现在我的一个测试设备上(在设置-> 常规-> 重置后它也可以正常工作,但是如何告诉苹果“请重置你的测试设备”?)。另一个工作得很好。

【问题讨论】:

CFNetwork SSLHandshake failed ios 9的可能重复 @FelixSFD ,您可以查看我的编辑 :) 非常感谢您的帖子。我有一个类似的问题,只有一个测试 iPhone 设备上的 http 请求不起作用(没有响应)。让我发疯,因为具有相同网络请求的相同应用程序可以在 5 部不同的物理 iPhone 上运行。最后,一个完整的设备重置解决了它,运行 iOS 12 beta 12。多么神秘的错误……浪费了一整天。 【参考方案1】:

错误 -9813 是 errSSLNoRootCert。这意味着服务器提供的证书链没有到达受信任的根(锚)证书,通常是由于链中缺少证书造成的。

一台设备与另一台设备之间存在差异的原因可能是因为某些设备能够成功获取丢失的证书(OCSP?),因为某些设备具有其他设备上不存在的额外受信任锚证书,无论出于何种原因,或者因为链中的某些证书​​是使用在 iOS 9 上不再接受的密钥签名算法进行签名的,因此被忽略了。

我建议您联系您的 TLS 证书供应商并获取 TLS 链文件的新副本,更新服务器上的链文件,重新启动服务器,看看问题是否消失。

如果这没有帮助,请使用我们可以测试的 URL 编辑您的问题,以及对相关主机运行 openssl s_client -connect yourhostname:443 的结果。

更多提示:

iOS HTTPS requests 101 https://developer.apple.com/library/ios/technotes/tn2232/_index.html

【讨论】:

以上是关于NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)错误不是在所有 iPhone 上?的主要内容,如果未能解决你的问题,请参考以下文章