Ich habe versucht, meine vorhandene App unter iOS9 auszuführen, aber bei der Verwendung ist ein Fehler aufgetreten AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
Ich erhalte folgende Fehlermeldung:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
Außerdem erhalten Sie folgende Protokolle:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Update: Ich habe meiner Lösung mehrere Updates hinzugefügt: NSURLSession / NSURLConnection HTTP-Laden unter iOS 9 fehlgeschlagen
ios
afnetworking
nsurlsession
ios9
tls1.2
Tariq
quelle
quelle
Antworten:
Gefundene Lösung:
In iOS9 erzwingt ATS Best Practices bei Netzwerkanrufen, einschließlich der Verwendung von HTTPS.
Aus der Apple-Dokumentation:
ATS verhindert versehentliche Offenlegung, bietet sicheres Standardverhalten und ist einfach anzuwenden. Sie sollten ATS so schnell wie möglich einführen, unabhängig davon, ob Sie eine neue App erstellen oder eine vorhandene aktualisieren. Wenn Sie eine neue App entwickeln, sollten Sie ausschließlich HTTPS verwenden. Wenn Sie über eine vorhandene App verfügen, sollten Sie HTTPS so oft wie möglich verwenden und einen Plan für die baldige Migration des Rests Ihrer App erstellen.
In Beta 1 gibt es derzeit keine Möglichkeit, dies in info.plist zu definieren. Die Lösung besteht darin, es manuell hinzuzufügen:
Update1: Dies ist eine vorübergehende Problemumgehung, bis Sie bereit sind, die iOS9 ATS-Unterstützung zu übernehmen.
Update2: Weitere Informationen finden Sie unter folgendem Link: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Update3: Wenn Sie versuchen, eine Verbindung zu einem Host (YOURHOST.COM) herzustellen, der nur TLS 1.0 enthält
Fügen Sie diese zur Info.plist Ihrer App hinzu
quelle
NSTemporaryExceptionMinimumTLSVersion
muss zB TLSv1.0 anstelle von 1.0 sein , siehe NSAppTransportSecurity Exception Domains WörterbuchschlüsselUmgang mit SSL in iOS9 , Eine Lösung besteht darin, Folgendes zu tun:
Wie der Apple sagt:
iOS 9 und OSX 10.11 erfordern TLSv1.2 SSL für alle Hosts, von denen Sie Daten anfordern möchten, es sei denn, Sie geben Ausnahmedomänen in der Info.plist-Datei Ihrer App an.
Die Syntax für die Info.plist-Konfiguration sieht folgendermaßen aus:
Wenn Ihre Anwendung (z. B. ein Webbrowser eines Drittanbieters) eine Verbindung zu beliebigen Hosts herstellen muss, können Sie sie folgendermaßen konfigurieren:
Wenn Sie dies tun müssen, ist es wahrscheinlich am besten, Ihre Server für die Verwendung von TLSv1.2 und SSL zu aktualisieren, sofern dies noch nicht geschehen ist. Dies sollte als vorübergehende Problemumgehung betrachtet werden.
Bis heute werden in der Vorabversionsdokumentation keine dieser Konfigurationsoptionen in irgendeiner Weise erwähnt. Sobald dies der Fall ist, aktualisiere ich die Antwort, um auf die entsprechende Dokumentation zu verlinken.
Weitere Informationen finden Sie unter iOS9AdaptationTips
quelle
Apples Technote zur App-Transportsicherheit ist sehr praktisch . Es hat uns geholfen, eine sicherere Lösung für unser Problem zu finden.
Hoffentlich hilft das jemand anderem. Wir hatten Probleme beim Herstellen einer Verbindung zu Amazon S3-URLs, die als vollkommen gültig erschienen, TLSv12-HTTPS-URLs. Es stellte sich heraus, dass wir deaktivieren mussten, um
NSExceptionRequiresForwardSecrecy
eine weitere Handvoll Chiffren zu aktivieren, die S3 verwendet.In unserem
Info.plist
:quelle
Wenn Sie dieses Problem mit Amazon S3 wie mir haben, versuchen Sie, es als direktes untergeordnetes Element Ihres Top-Level-Tags in Ihre info.plist einzufügen
Weitere Informationen finden Sie unter:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
quelle
Ich habe von hier aus eine Lösung gefunden. Und es funktioniert für mich.
Überprüfen Sie dies, es kann Ihnen helfen.
quelle
Fügen Sie einfach die folgenden Felder in Ihre .plist-Datei ein
Die Syntax sieht folgendermaßen aus:
quelle
Aktualisieren:
Ab Xcode 7.1 müssen Sie das
NSAppTransportSecurity
Wörterbuch nicht mehr manuell in das Verzeichnis eingebeninfo.plist
.Es wird jetzt automatisch für Sie vervollständigt, erkennt, dass es sich um ein Wörterbuch handelt, und vervollständigt dann auch die
Allows Arbitrary
Lasten automatisch . info.plist Screenshotquelle
Lösen Sie den Fehler beim Laden des NSURLConnection-HTTP-Fehlers. Fügen Sie einfach den folgenden Dict in der info.plist hinzu:
quelle
Ich habe es durch Hinzufügen eines Schlüssels in info.plist gelöst. Die Schritte, die ich befolgt habe, sind:
Ich habe die Datei info.plist meines Projekts geöffnet
Es wurde ein Schlüssel namens NSAppTransportSecurity als Wörterbuch hinzugefügt.
Es wurde ein Unterschlüssel mit dem Namen NSAllowsArbitraryLoads als Boolescher Wert hinzugefügt und der Wert wie im folgenden Bild auf YES gesetzt. Geben Sie hier die Bildbeschreibung ein
Bereinigen Sie das Projekt und jetzt läuft alles wie zuvor.
Referenzlink: https://stackoverflow.com/a/32609970
quelle
Dies hat bei mir funktioniert, als ich diesen Fehler hatte:
quelle
Sie können versuchen, diese Funktion in der Datei RCTHTTPRequestHandler.m hinzuzufügen
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
quelle
Überprüfen Sie zusätzlich zu den oben genannten Antworten Ihre URL erneut
quelle
Sie sollten hinzufügen
App Transport Security Settings
zuinfo.plist
und fügen SieAllow Arbitrary Loads
zuApp Transport Security Settings
quelle