Welche Einstellung muss ich in meine einfügen? info.plist
um den HTTP-Modus gemäß der folgenden Fehlermeldung zu aktivieren?
Die Transportsicherheit hat eine Klartext-HTTP-Ressource (http: //) blockiert
laden, da es unsicher ist. Temporäre Ausnahmen können über konfiguriert werden
die Info.plist-Datei Ihrer App.

Angenommen, meine Domain ist example.com
.
Wenn Sie Xcode 8.0 und Swift 3.0 oder Swift 2.2 oder sogar Objective C verwenden:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Benutzen:

Sie müssen das einstellen NSAllowsArbitraryLoads Schlüssel zu JA unter NSAppTransportSicherheit Wörterbuch in Ihrer .plist-Datei.

Hier sind die Einstellungen visuell:

Siehe den Forenbeitrag Anwendung Transportsicherheit?.
Auch die Seite Konfigurieren von App-Transport-Sicherheitsausnahmen in iOS 9 und OS X 10.11.
Sie können beispielsweise eine bestimmte Domäne hinzufügen, z.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.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>
Die faule Option ist:
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Hinweis:
info.plist
ist eine XML-Datei, so dass Sie diesen Code mehr oder weniger überall in der Datei platzieren können.
Dies wurde getestet und war auf iOS 9 GM-Seed - das ist die Konfiguration, um ein zu ermöglichen Spezifisch Domäne, die HTTP anstelle von HTTPS verwendet:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> <!--Include your domain at this line -->
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
NSAllowsArbitraryLoads
muss sein false
weil es nicht erlaubt alle unsichere Verbindung, aber die Ausnahmenliste ermöglicht die Verbindung zu etwas Domains ohne HTTPS.
Dies ist eine schnelle Problemumgehung (aber nicht empfohlen), um dies im plist hinzuzufügen:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Was bedeutet (nach Apples Dokumentation):
NSAllowsArbitraryLoads
Ein boolescher Wert zum Deaktivieren der App-Transportsicherheit für alle Domänen, die nicht im NSExceptionDomains-Wörterbuch aufgeführt sind. Gelistete Domänen verwenden die für diese Domäne angegebenen Einstellungen.
Der Standardwert NO erfordert das standardmäßige App-Transport-Sicherheitsverhalten für alle Verbindungen.
Ich empfehle wirklich Links:
die mir helfen, Gründe und alle Implikationen zu verstehen.
Das XML (in der Datei Info.plist) unten wird:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
verbieten Sie beliebige Aufrufe für alle Seiten, aber für PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE
ermöglicht, dass Verbindungen das HTTP-Protokoll verwenden.
Zum obigen XML können Sie hinzufügen:
<key>NSIncludesSubdomains</key>
<true/>
wenn Sie unsichere Verbindungen für die Subdomains der angegebenen Adresse erlauben wollen.
Der beste Ansatz besteht darin, alle beliebigen Lasten zu blockieren (auf "false" gesetzt) und Ausnahmen hinzuzufügen, um nur Adressen zuzulassen, von denen wir wissen, dass sie in Ordnung sind.
Für interessierte Leser
Für diejenigen unter euch, die mehr Kontext wollen Warum Dies geschieht, zusätzlich zu, wie es zu beheben, dann lesen Sie weiter unten.
Mit der Einführung von iOS 9, um die Sicherheit von Verbindungen zwischen einer App und Webdiensten zu verbessern, Sichere Verbindungen zwischen einer App und ihrem Webdienst müssen den Best Practices folgen. Das Verhalten von Best Practices wird von der App-Transportsicherheit zu:
- versehentliche Offenlegung zu verhindern, und
- ein Standardverhalten bereitstellen, das sicher ist.
Wie in der App Transport SicherheitstechnikBei der Kommunikation mit Ihrem Webdienst weist App Transport Security jetzt die folgenden Anforderungen und das folgende Verhalten auf:
- Der Server muss mindestens TLS-Protokoll (Transport Layer Security) Version 1.2 unterstützen.
- Verbindungscipher sind auf diejenigen beschränkt, die Vorwärtsgeheimnisse bereitstellen (siehe die Liste der Verschlüsselungen unten).
- Zertifikate müssen mit einem SHA256 oder besser Signatur-Hash-Algorithmus signiert werden, entweder mit einem RSA-Schlüssel mit 2048 Bit oder mehr oder mit einem 256 Bit oder
Größerer Elliptic-Curve (ECC) Schlüssel.
- Ungültige Zertifikate führen zu einem schwerwiegenden Fehler und zu keiner Verbindung.
Mit anderen Worten, Ihre Web-Service-Anfrage sollte: a.) Verwenden HTTPS und b.) mit TLS v1.2 mit Forward Secrecy verschlüsselt werden.
Wie in anderen Posts erwähnt, können Sie dieses neue Verhalten jedoch von App Transport Security überschreiben, indem Sie die unsichere Domäne in der Info.plist
deiner App
Um es zu überschreiben, müssen Sie das hinzufügen NSAppTransportSecurity
> NSExceptionDomains
Wörterbuch Eigenschaften zu Ihrem Info.plist
. Als Nächstes fügen Sie die Domäne Ihres Web-Service der. Hinzu NSExceptionDomains
Wörterbuch.
Zum Beispiel, wenn ich das Verhalten der App-Transportsicherheit für einen Webdienst auf dem Host umgehen möchte www.yourwebservicehost.com dann würde ich folgendes tun:
Öffnen Sie Ihre App in Xcode.
Finde das Info.plist
Datei im Projektnavigator und "rechte Maustaste" klicken Sie darauf und wählen Sie die Öffnen als > Quellcode Menüoption. Die Eigenschaftenlistendatei wird im rechten Fensterbereich angezeigt.
Setzen Sie den folgenden Eigenschaftsblock in das Haupteigenschaftenwörterbuch (unter dem ersten) <dict>
).
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Wenn Sie Ausnahmen für weitere Domänen bereitstellen müssen, fügen Sie eine weitere Wörterbucheigenschaft hinzu NSExceptionDomains
.
Um mehr über die oben genannten Schlüssel zu erfahren, lesen Sie das bereits erwähnte technote.