我的某个应用无法连接到它的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]);
}
仍然没有......
P.S。即使我的第一个问题是许多其他问题的重复,我主要担心的是为什么这个错误只出现在我的一个测试设备上(在设置 - >一般 - >重置它也可以正常工作,但如何告诉Apple&#34 ;请重置您的测试设备"?)。另一项工作完全没问题。
答案 0 :(得分:0)
错误-9813是errSSLNoRootCert。这意味着服务器提供的证书链未达到受信任的根(锚)证书,并且通常是由链中缺少证书引起的。
从一个设备到另一个设备的差异的原因可能是因为某些设备能够成功获取丢失的证书(OCSP?),因为某些设备具有额外的可信锚证书,这些证书由于某种原因而不存在于其他设备上,或者因为链中的某些证书是使用在iOS 9上不再接受的密钥签名算法签名的,因此被忽略。
我建议您联系您的TLS证书供应商并获取TLS链文件的新副本,更新服务器上的链文件,重新启动服务器,然后查看问题是否消失。
如果这没有帮助,请使用我们可以测试的网址修改您的问题,以及针对相关主机运行openssl s_client -connect yourhostname:443
的结果。
这里有更多提示: