Frage Transportsicherheit hat ein Klartext-HTTP blockiert


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.

Xcode

Angenommen, meine Domain ist example.com.


1279
2017-07-06 20:10


Ursprung


Antworten:


Wenn Sie Xcode 8.0 und Swift 3.0 oder Swift 2.2 oder sogar Objective C verwenden:

Enter image description here

<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>

238
2017-10-28 07:06



Benutzen:

Enter image description here

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

Plist configuration


889
2017-08-04 10:42



Hier sind die Einstellungen visuell:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI


788
2017-11-14 19:08



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.


686
2017-07-06 20:19



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 falseweil es nicht erlaubt alle unsichere Verbindung, aber die Ausnahmenliste ermöglicht die Verbindung zu etwas Domains ohne HTTPS.


296
2017-09-14 08:36



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


124
2017-09-01 12:10



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:

  1. Öffnen Sie Ihre App in Xcode.

  2. 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.

  3. 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.


112
2017-09-21 17:56