NSURLSession/NSURLConnection HTTP laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9802 in iOS10, 2017
DIES IST KEINE WIEDERHOLTE FRAGE, LESEN SIE WEITER. Ich bin Modernisierung des veralteten code in meine app zu iOS10 compliance.
DEN FEHLER:
NSURLSession ist, gebe mir Mühe, mit diesem berüchtigten Fehler, zusammen mit 9806 und 9801, je nach dem, was ich auf dem .plist-Datei:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
MEIN CODE:
In meiner Info.plist-Datei, die ich habe:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>https://my.own-server.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowInsecureHTTPSLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
</dict>
</dict>
In meinem ObjectiveC-code, ich habe dieses:
NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session __unused = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:[PortalRequest alloc] delegateQueue:[NSOperationQueue mainQueue]]; operationQueue:[NSOperationQueue mainQueue]];
requestContainer.sessionDataTask = [session dataTaskWithRequest:request];
[self.sessionDataTask resume];
In der DELEGATE-Methode der Klasse machen, wo die URLSession nennen, ich kann sehen, didReceiveChallenge:
LOG: ** NSURLSession IOS10 ** - didReceiveChallenge called
...und endlich bekomme ich die Fehlermeldung:
[TIMESTAMP] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)
DEM SERVER
Keine der vorgeschlagenen Lösungen in anderen Antworten arbeiten, ist es wegen des Apple-2017 Frist?
https://techcrunch.com/2016/06/14/apple-will-require-https-connections-for-ios-apps-by-the-end-of-2016/
Nach diesem online-Sicherheits-Analyse-tool, https://www.ssllabs.com/ssltest/analyze.html
Das backend unterstützt TLS 1.2
Irgendwelche Ideen auf, wie man dieses Problem lösen??
Wissen Sie, wo finden Sie einige iOS-sample-code zu 100% sicher, dass der endpoint ich hindeute, ist frei von Schuld?
UPDATE
Dieser code funktioniert für mich, irgendwelche Meinungen?:
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler{
NSLog(@"*** KBRequest.NSURLSessionDelegate - didReceiveChallenge IOS10");
if([challenge.protectionSpace.authenticationMethod
isEqualToString:NSURLAuthenticationMethodServerTrust])
{
if([challenge.protectionSpace.host
isEqualToString:@"engine.hello-indigo.com"])
{
NSURLCredential *credential =
[NSURLCredential credentialForTrust:
challenge.protectionSpace.serverTrust];
completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
}
else
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
}
}
Wie u Ihr problem lösen? bacause ich habe http-audio-stream und NSURLConnection beendet mit Fehler - code -1002
Ich löste es, Blick auf das Update auf meine Frage. Es funktioniert, und niemand schlägt vor, eine bessere Idee, so werde ich halte es für gut. Über Ihren code 1002 Fehler, überprüfen Sie, dass Sie bei der Verwendung von https in der URL - stackoverflow.com/questions/26647423/...
Oh mein Freund, den ich verwenden den audio-stream, und wie ich bin, verstehe audio-stream nicht über https...es stimmt oder nicht? wie u denken?
klingt kompliziert, aber Sie sind das senden dieser audio-stream zu einem server-Adresse richtig? Diese Adresse muss mit http oder https.
InformationsquelleAutor Josh | 2017-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen NSExceptionRequiresForwardSecrecy auf false.
Allerdings ist Ihr server erfüllen die min Anforderung für Transport Layer Security (TLS) protocol, version, Ihre server-Verbindung-Chiffre möglicherweise nicht unterstützen forward secrecy.
InformationsquelleAutor Idali
Habe ich endlich das Problem gelöst!
Ich nahm die Ausnahmen von der .plist-Datei, und fügte diesen code, um das didReceiveChallenge Delegieren Methode:
Dieser Artikel war sehr nützlich:
http://timekl.com/blog/2015/08/21/shipping-an-app-with-app-transport-security/
Sie absolut können nicht Schiff das auf der app store mit diesem hack. Ihre app wird mit ziemlicher Sicherheit abgelehnt bekommen. Ich habe ein Beispiel für eine Abschluss-handler lädt eine custom root cert von Ihrem app-bundle und validieren von Anforderungen gegen.
Würden Sie bitte teilen Sie Ihre Beispiel als Antwort? Ich verspreche ein grünes Häkchen, wenn es funktioniert. @dgatwood
InformationsquelleAutor Josh
Um zu vermeiden, bricht die TLS-vollständig (nicht zu schweigen von anderen Formen der Authentifizierung), Sie tun sollten, so etwas wie dieses:
Beachten Sie, dass dieser code nicht kompilierte und ungetestet, so fühlen sich frei, zu beheben, Tippfehler und andere Fehler.
Nein, es ist nicht sicher. Der code, den Sie geschrieben bedeutet, dass jeder bieten kann jedes Zertifikat, das mit jedem Schlüssel für diesen Hostnamen. Es reduziert effektiv Ihre app verlangen Sicherheit zu unverschlüsseltem HTTP, und wenn du gehst zu tun, Sie könnte genauso gut einfach HTTP verwenden und Fragen für eine Ausnahme (Glück).
InformationsquelleAutor dgatwood