it-swarm.com.de

NSURLSession/NSURLConnection-HTTP-Laden ist unter iOS 9 fehlgeschlagen

Ich habe versucht, meine vorhandene App auf iOS9 auszuführen, bekam jedoch einen Fehler bei der Verwendung von 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.

Folgende Logs werden auch abgerufen: 

 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
 CFNetwork SSLHandshake failed (-9824)

Update: Ich habe mehrere Updates zu meiner Lösung hinzugefügt: NSURLSession/NSURLConnection HTTP-Lade fehlgeschlagen unter iOS 9

132
Tariq

Gefundene Lösung:

In iOS9 erzwingt ATS Best Practices während Netzwerkanrufen, einschließlich der Verwendung von HTTPS.

Aus der Apple-Dokumentation:

ATS verhindert versehentliche Offenlegung, bietet sicheres Standardverhalten und ist einfach zu übernehmen. Sie sollten ATS so bald wie möglich übernehmen, 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 erstellen, um die restliche App so schnell wie möglich zu migrieren.

In der Beta 1 gibt es derzeit keine Möglichkeit, dies in info.plist zu definieren. Lösung ist, es manuell hinzuzufügen:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

enter image description here

Update1:Dies ist eine temporäre Problemumgehung, bis Sie bereit sind, die ATS-Unterstützung von iOS9 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 der Info.plist Ihrer App hinzu

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>YOURHOST.COM</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>1.0</string>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
237
Tariq

So gehen Sie mit dem SSL in iOS9 vor is Eine Lösung besteht darin, Folgendes zu tun:

Wie der Apple sagen: enter image description hereenter image description here

enter image description here

für iOS 9 und OSX 10.11 ist TLSv1.2-SSL für alle Hosts erforderlich, von denen Sie Daten anfordern möchten, sofern Sie keine Ausnahmedomänen in der Info.plist-Datei Ihrer App angeben.

Die Syntax für die Info.plist-Konfiguration sieht folgendermaßen aus:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

Wenn Ihre Anwendung (z. B. ein Webbrowser eines Drittanbieters) eine Verbindung zu beliebigen Hosts herstellen muss, können Sie diese wie folgt konfigurieren:

<key>NSAppTransportSecurity</key>
<dict>
    <!--Connect to anything (this is probably BAD)-->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Wenn Sie dies tun müssen, sollten Sie Ihre Server wahrscheinlich so aktualisieren, dass sie TLSv1.2 und SSL verwenden, sofern dies nicht bereits der Fall ist. Dies sollte als temporäre Problemumgehung betrachtet werden.

In der Prerelease-Dokumentation ist bis heute keine der Konfigurationsoptionen erwähnt. Sobald dies der Fall ist, werde ich die Antwort aktualisieren, um auf die entsprechende Dokumentation zu verweisen.

Weitere Informationen finden Sie unter iOS9AdaptationTips

52
ElonChan

Apples Technote zur App Transport-Sicherheit ist sehr praktisch ; Es half uns, eine sicherere Lösung für unser Problem zu finden.

Hoffentlich hilft das jemand anderen. Beim Herstellen der Verbindung zu Amazon S3-URLs, die scheinbar einwandfrei waren, TLSv12-HTTPS-URLs, gab es Probleme. Es stellte sich heraus, dass wir NSExceptionRequiresForwardSecrecy deaktivieren mussten, um eine weitere Handvoll Chiffren zu aktivieren, die S3 verwendet.

In unserem Info.plist:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>amazonaws.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSExceptionRequiresForwardSecrecy</key>
      <false/>
    </dict>
  </dict>
</dict>
39
Ben Kreeger

Wenn Sie dieses Problem mit Amazon S3 als mir haben, versuchen Sie, dieses als direktes untergeordnetes Element Ihres Top-Level-Tags in Ihre info.plist einzufügen

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>amazonaws.com</key>
        <dict>
              <key>NSThirdPartyExceptionMinimumTLSVersion</key>
              <string>TLSv1.0</string>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
              <key>NSIncludesSubdomains</key>
              <true/>
        </dict>
        <key>amazonaws.com.cn</key>
        <dict>
              <key>NSThirdPartyExceptionMinimumTLSVersion</key>
              <string>TLSv1.0</string>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
              <key>NSIncludesSubdomains</key>
              <true/>
        </dict>
    </dict>
</dict>

Weitere Informationen finden Sie unter:

http://docs.aws.Amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue

6
David Cespedes

Ich habe eine Lösung von hier gefunden. Und es arbeitet für mich.

Überprüfen Sie dies, es kann Ihnen helfen.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
         <dict>
             <key>myDomain.com</key>
                    <dict>
                      <!--Include to allow subdomains-->
                      <key>NSIncludesSubdomains</key>
                      <true/>
                      <!--Include to allow HTTP requests-->
                      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                      <true/>
                      <!--Include to specify minimum TLS version-->
                      <key>NSTemporaryExceptionMinimumTLSVersion</key>
                      <string>TLSv1.1</string>
                </dict>
          </dict>
</dict>
4
Ashvin Ajadiya

Fügen Sie einfach die folgenden Felder in Ihre .plist-Datei ein

 enter image description here

Syntax sieht so aus:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
3
geet Sebastian

Löse den Fehler beim Laden von NSURLConnection-HTTP-Fehlern.

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSAllowsArbitraryLoadsInWebContent</key>
        <true/>
    </dict>
2
Sakir Sherasiya

Aktualisieren: 

Seit Xcode 7.1 müssen Sie das NSAppTransportSecurity Dictionary nicht manuell in den info.plist eingeben.

Es wird nun automatisch für Sie automatisch vervollständigt, erkennt, dass es sich um ein Wörterbuch handelt, und dann auch die Allows Arbitrary-Ladevorgänge automatisch. info.plist screenshot

1
Ben

Dies hat bei mir funktioniert, als ich diesen Fehler hatte:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
        </dict>
    </dict>
</dict>
0
KVISH

Sie können diese Funktion in der Datei RCTHTTPRequestHandler.m hinzufügen

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

0
eliprodigy

Überprüfen Sie zusätzlich zu den oben genannten Antworten Ihre URL 

0
Vaishnavi

Ich habe es durch das Hinzufügen eines Schlüssels in info.plist gelöst. Die Schritte, die ich befolgt habe, sind:

Ich habe die info.plist-Datei meines Projekts geöffnet

Es wurde ein Schlüssel namens NSAppTransportSecurity als Wörterbuch hinzugefügt.

Ein Unterschlüssel namens NSAllowsArbitraryLoads wurde als Boolean hinzugefügt und der Wert auf YES gesetzt (siehe folgendes Bild). Geben Sie hier die Bildbeschreibung ein

Reinigen Sie das Projekt und jetzt läuft alles wie zuvor.

Ref Link: https://stackoverflow.com/a/32609970

0
tania_S