2015-09-24 12 views

Antwort

84

Für die iOS9, Apple hat mit iOS 9 eine radikale Entscheidung getroffen, den gesamten ungesicherten HTTP-Verkehr von iOS-Apps als Teil von App Transport Security (ATS) zu deaktivieren.

einfach deaktivieren ATS, können Sie diese Schritte durch offene Info.plist folgen können, und fügen Sie die folgenden Zeilen:

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

Ich fügte oben genannte Zeilen in PLIST hinzu, aber immer noch folgende Fehlermeldung: Ein SSL-Fehler ist aufgetreten und eine sichere Verbindung mit dem Server kann nicht hergestellt werden. NSLocalizedRecoverySuggestion = Möchten Sie sich trotzdem mit dem Server verbinden ?, _kCFNetworkCFStreamSSLErrorOriginalValue = -9819 Ich rufe HTTPS Anfrage an. Gibt es eine andere Option für HTTPS? – AiOsN

+1

AiOsN = das gleiche Problem hier, hast du eine Lösung gefunden? – Franck

+3

Es scheint eine häufige Fehlinterpretation zu sein, dass NSAllowsArbitraryLoads ein Schalter ist, um ATS zu aktivieren oder zu deaktivieren. Sobald Sie eine https: // - Anfrage stellen, müssen Sie sicherstellen, dass Sie die ATS-Anforderungen erfüllen: ein gültiges Zertifikat auf dem Server (ohne Platzhalter, genau passend zum Domain-Namen des Servers), Server unterstützt TLS 1.2 mit Weiterleitung Geheimhaltung. – Christian

40

Obwohl erlaubt beliebige Lasten (NSAllowsArbitraryLoads = true) ist eine gute Abhilfe, shouldn Sie ‚t vollständig deaktivieren ATS, sondern ermöglichen es eher die HTTP-Verbindung, die Sie zulassen möchten:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>yourserver.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> 
+2

Viel besser als alle Sicherheitsprobleme zu ignorieren. Der S3-Dienst von Amazon verwendet eine schwache Verschlüsselung, und das direkte Laden auf ihre Server verursachte Probleme, aber dies ermöglichte es uns, nur die URL s3.amazonaws.com zu öffnen und den Rest inline zu halten. Genial! – mix3d

14

iOS 9 Kräfte Verbindungen, die HTTPS verwenden TLS 1.2 zu den letzten Schwachstellen zu vermeiden. In iOS 8 wurden sogar unverschlüsselte HTTP-Verbindungen unterstützt, so dass ältere Versionen von TLS auch keine Probleme machten.

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

* bezogen auf App Transport Security (ATS)

enter image description here

1

Das Problem ist die Seite SSL-Zertifikat auf dem Server: Als Abhilfe können Sie diesen Code-Schnipsel zu Ihrem Info.plist hinzuzufügen. Entweder stört etwas oder das Zertifikat stimmt nicht mit dem Service überein. Zum Beispiel, wenn eine Website ein SSL-Zertifikat für www.mydomain.com hat, während der Service, den Sie verwenden, auf myservice.mydomain.com ausgeführt wird. Das ist eine andere Maschine.

4

Es scheint, dass iOS 9.0.2 Anforderungen an gültige HTTPS-Endpunkte unterbricht. Mein derzeitiger Verdacht ist, dass SHA-256-Zertifikate benötigt werden, oder es schlägt mit diesem Fehler fehl.

zu reproduzieren, überprüfen Sie Ihren UIWebView mit Safari, und versucht, zu einem beliebigen HTTPS-Endpunkt der Navigation:

location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js" 
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0) 

Jetzt versuchen google gehen (weil sie natürlich ein SHA-256-Zertifikat hat):

location.href = "https://google.com" 
// no problemo 

Das Hinzufügen einer Ausnahme zur Transportsicherheit (wie in der Antwort von @ stéphane-bruckert oben beschrieben) funktioniert, um dies zu beheben. Ich gehe auch davon aus, dass die vollständige Deaktivierung von NSAppTransportSecurity auch funktionieren würde, obwohl ich gelesen habe, dass eine vollständige Deaktivierung die App-Überprüfung gefährden kann.

[EDIT] Ich habe festgestellt, dass einfach das Aufzählen der Domänen, die ich mit dem dict verbinden, dieses Problem behebt, auch wenn NSExceptionAllowsInsecureHTTPLoads auf True gesetzt bleibt. : \

11

Wenn Sie nur bestimmte Domänen Targeting sind, können Sie dies in Ihrer Anwendung Info.plist versuchen und fügen:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>example.com</key> 
     <dict> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <false/> 
      <key>NSIncludesSubdomains</key> 
      <true/> 
     </dict> 
    </dict> 
</dict> 
+0

Das hat nicht für mich funktioniert. Ja, ich habe die richtige Domain für "example.com" eingegeben. – Alyoshak

+1

Es ist Arbeit für mich. Als ich das Beispiel nur mit "Allow Arbitrary Loads" gemacht habe, funktioniert das aber nach dem Stoppen. Wenn ich den Schlüssel "NSExceptionRequiresForwardSecrecy" -> false und "NSIncludesSubdomains" -> true verwendet, funktioniert es perfekt. Danke vielmals! – linhadiretalipe

+1

Das hat auch für mich funktioniert! Obwohl ich HTTPS-Verbindung verwende, stand ich immer noch vor dem Problem. Derzeit wird keine Unterstützung für 'NSExceptionRequiresForwardSecrecy' angeboten. Nach dem, was ich gelesen habe, war es nicht nötig, dies früher zu spezifizieren, aber es sieht so aus, als hätten sie das jetzt auch vorgeschrieben. PS: Ich habe es mit iOS 10.2.1 –

0

Xcode Projekt -> gehe zu info.Klicken Sie auf, und klicken Sie dann auf Hinzufügen, dann auf Hinzufügen (App-Transport-Sicherheitseinstellungen). Erweitern Sie Zulassen beliebiger Lasten. Legen Sie JA fest. Danke

+0

schon versucht. Immer noch gleichen Fehler –

+0

@AbdulYasin überprüfen Sie Ihre PLIST und überprüfen Wetteränderungen aktualisiert werden oder nicht? –