2016-06-30 44 views
0

我的一個應用程序無法連接到它的API服務器。記錄的原因是NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)。到目前爲止,沒有找到爲什麼或什麼的運氣,但最令人沮喪的是,這個問題出現在我的一些測試設備上。在其他一切都很好。我使用NSURLConnection:sendSynchronousRequest:returningResponse:error:,但經過一些重構並嘗試使用NSURLSessionDataTask:dataTaskWithRequest:completionHandler:後,問題仍然存在。 還增加NSURLSession/NSURLConnection HTTP加載失敗(kCFStreamErrorDomainSSL,-9813)錯誤不是所有的iPhone?

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler 
{ 
    completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); 
} 

,仍然沒有.....

附:即使我的第一個問題是許多其他問題的重複,但我主要關心的是爲什麼這個錯誤只出現在我的一個測試設備上(在設置 - >常規 - >重置工作正常後,但如何告訴Apple「請重置您的測試設備「?)。其他工作非常好。

+0

的可能的複製[CFNetwork的SSLHandshake失敗的iOS 9](http://stackoverflow.com/questions/30720813/cfnetwork-sslhandshake -failed-ios-9) – FelixSFD

+0

@FelixSFD,你可以查看我的編輯:) – user3352185

回答

0

錯誤-9813是errSSLNoRootCert。這意味着服務器提供的證書鏈沒有達到受信任的根(錨)證書,並且通常是由鏈中缺少證書導致的。

從一個設備到另一個設備的差異的原因可能是因爲某些設備能夠成功獲取缺失證書(OCSP?),因爲某些設備具有額外的可信錨點證書,因爲其他設備上不存在其他設備原因,還是因爲鏈中的某些證書​​是使用不再被iOS 9接受的密鑰簽名算法進行簽名的,因此被忽略。

我建議您聯繫您的TLS證書供應商,並獲取TLS鏈文件的新副本,更新服務器上的鏈文件,重新啓動服務器並查看問題是否消失。

如果這樣做沒有幫助,請使用我們可以測試的網址編輯您的問題,以及針對相關主機運行openssl s_client -connect yourhostname:443的結果。

更多的技巧在這裏:

相關問題