Question La sécurité du transport a bloqué un texte en clair HTTP


Quel paramètre dois-je mettre dans mon info.plist activer le mode HTTP selon le message d'erreur suivant?

La sécurité du transport a bloqué une ressource HTTP HTTP (http: //)   charger car il n'est pas sécurisé. Les exceptions temporaires peuvent être configurées via   le fichier Info.plist de votre application.

Xcode

Supposons que mon domaine est example.com.


1279
2017-07-06 20:10


origine


Réponses:


Si vous utilisez Xcode 8.0 et Swift 3.0 ou Swift 2.2 ou même Objective C:

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



Utilisation:

Enter image description here

Vous devez définir le NSAllowsArbitraryLoads la clé de OUI en dessous de NSAppTransportSecurity dictionnaire dans votre fichier .plist.

Plist configuration


889
2017-08-04 10:42



Voici les paramètres visuellement:

visual settings for NSAllowsArbitraryLoads in info.plist via Xcode GUI


788
2017-11-14 19:08



Voir le message sur le forum Sécurité du transport de l'application?.

Aussi la page Configuration des exceptions de sécurité du transport App dans iOS 9 et OSX 10.11.

Par exemple, vous pouvez ajouter un domaine spécifique comme:

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

L'option paresseuse est:

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

Remarque:

info.plist est un fichier XML de sorte que vous pouvez placer ce code plus ou moins n'importe où dans le fichier.


686
2017-07-06 20:19



Cela a été testé et travaillait sur iOS 9 GM semences - c'est la configuration pour permettre une spécifique domaine à utiliser HTTP au lieu de HTTPS:

<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 doit être false, parce qu'il interdit tout connexion non sécurisée, mais la liste des exceptions permet la connexion à certains domaines sans HTTPS.


296
2017-09-14 08:36



C'est une solution de contournement rapide (mais non recommandée) pour ajouter ceci dans le plist:

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

Quels moyens (selon La documentation d'Apple):

NSAllowsArbitraryLoads
  Valeur booléenne utilisée pour désactiver la sécurité du transport des applications pour les domaines non répertoriés dans le dictionnaire NSExceptionDomains. Les domaines répertoriés utilisent les paramètres spécifiés pour ce domaine.

La valeur par défaut de NO requiert le comportement App Transport Security par défaut pour toutes les connexions.

Je recommande vraiment les liens:

qui m'aident à comprendre les raisons et toutes les implications.

Le fichier XML (dans le fichier Info.plist) ci-dessous va:

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

interdire les appels arbitraires pour toutes les pages, mais pour PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE permettra que les connexions utilisent le protocole HTTP.

Pour le XML ci-dessus, vous pouvez ajouter:

<key>NSIncludesSubdomains</key>
<true/>

si vous souhaitez autoriser des connexions non sécurisées pour les sous-domaines de l'adresse spécifiée.

La meilleure approche consiste à bloquer toutes les charges arbitraires (définies sur false) et à ajouter des exceptions pour autoriser uniquement les adresses que nous connaissons.

Pour les lecteurs intéressés


124
2017-09-01 12:10



Pour ceux d'entre vous qui veulent plus de contexte sur Pourquoi cela se passe, en plus de la façon de le réparer, puis lire ci-dessous.

Avec l'introduction d'iOS 9, pour améliorer la sécurité des connexions entre une application et des services Web, les connexions sécurisées entre une application et son service Web doivent suivre les meilleures pratiques. Le comportement des meilleures pratiques est appliqué par le App Transport Security à:

  • empêcher la divulgation accidentelle, et
  • fournir un comportement par défaut sécurisé.

Comme expliqué dans le Technote de sécurité du transport App, lors de la communication avec votre service Web, App Transport Security a désormais les exigences et le comportement suivants:

  • Le serveur doit prendre en charge au moins la version 1.2 du protocole TLS (Transport Layer Security).
  • Les chiffrements de connexion sont limités à ceux qui fournissent le secret de transfert (voir la liste des chiffrements ci-dessous).
  • Les certificats doivent être signés à l'aide d'un algorithme de hachage de signature SHA256 ou mieux, avec une clé RSA de 2048 bits ou plus ou un bit 256 ou   plus grande touche Elliptic-Curve (ECC).
  • Les certificats non valides entraînent une défaillance matérielle et aucune connexion.

En d'autres termes, votre demande de service Web doit: a.) Utiliser HTTPS et b.) être chiffré en utilisant TLS v1.2 avec le secret de transfert.

Toutefois, comme cela a été mentionné dans d'autres publications, vous pouvez remplacer ce nouveau comportement de App Transport Security en spécifiant le domaine non sécurisé dans Info.plist de votre application


Pour remplacer, vous devrez ajouter le NSAppTransportSecurity > NSExceptionDomains propriétés du dictionnaire à votre Info.plist. Ensuite, vous allez ajouter le domaine de votre service Web à NSExceptionDomains dictionnaire.

Par exemple, si je veux contourner le comportement App Transport Security pour un service Web sur l'hôte www.yourwebservicehost.com alors je ferais ce qui suit:

  1. Ouvrez votre application dans Xcode.

  2. Trouvez le Info.plist fichier dans Project Navigator et cliquez avec le bouton droit de la souris Ouvrir comme > Code source option de menu. Le fichier de liste de propriétés apparaîtra dans le volet de droite.

  3. Placez le bloc de propriétés suivant dans le dictionnaire des propriétés principales (sous le premier <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>

Si vous devez fournir des exceptions pour des domaines supplémentaires, vous devez ajouter une autre propriété de dictionnaire sous NSExceptionDomains.

Pour en savoir plus sur les clés référencées ci-dessus, lisez cette technote déjà mentionnée.


112
2017-09-21 17:56



Je n'aime pas éditer le plist directement. Vous pouvez facilement l'ajouter à la plist en utilisant l'interface graphique:

  • Cliquez sur Info.plist dans le navigateur sur la gauche.
  • Maintenant, changez les données dans la zone principale:

    • Sur la dernière ligne, ajoutez le +
    • Entrez le nom du groupe: Paramètres de sécurité du transport de l'application
    • Faites un clic droit sur le groupe et sélectionnez Add Row
    • Entrer Autoriser des charges arbitraires 
    • Définissez la valeur sur la droite pour OUI

Example


64
2017-11-06 08:06



Apple Document 1

Apple Document 2

Il y a deux solutions pour cela:

Solutions 1: 

  1. Dans Info.plist fichier ajouter un dictionnaire avec la clé 'NSAppTransportSecurity'
  2. Ajouter un autre élément dans le dictionnaire avec la clé 'Allow Arbitrary Loads'

Plist la structure devrait apparaître comme indiqué dans l'image ci-dessous.

Solution 1

Solution 2:

  1. Dans Info.plist fichier ajouter un dictionnaire avec la clé 'NSAppTransportSecurity'
  2. Ajouter un autre élément dans le dictionnaire avec la clé 'NSExceptionDomains'
  3. Ajouter un élément avec la clé 'MyDomainName.com' de type NSDictionary
  4. Ajouter un élément avec la clé 'NSIncludesSubdomainsde type Booleanet valeur définie comme YES
  5. Ajouter un élément avec la clé 'NSTemporaryExceptionAllowsInsecureHTTPLoadsde type Booleanet valeur définie comme YES

Plist la structure devrait apparaître comme indiqué dans l'image ci-dessous.

Solution 2

La solution 2 est préférée car elle ne permet que le domaine sélectionné alors que la solution 1 autorise toutes les connexions HTTP non sécurisées.


23
2018-03-10 11:29