La sécurité des transports a bloqué un HTTP en texte clair

1451

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

La sécurité des transports a bloqué une charge de ressources HTTP (http: //) en texte clair car elle n'est pas sécurisée. Les exceptions temporaires peuvent être configurées via le fichier Info.plist de votre application.

Xcode

Supposons que mon domaine soit example.com.

Jeef
la source
15
Note du modérateur : Il y a déjà 36 réponses à cette question. Avant d'en ajouter un autre , assurez-vous que votre solution est nouvelle .
Matt
5
REMARQUE: Les solutions suggèrent ici que vous devez désactiver ATS ( Allow arbitary loads). Bientôt, cela ne sera pas possible car Apple exigera ATS (à l'origine la fin de l'année - le délai a été prolongé) - developer.apple.com/news/?id=12212016b
Jakub Truhlář
@Jeef pourquoi avez-vous ajouté la balise iOS 10? y a-t-il eu des changements supplémentaires dans iOS 10 à ce sujet? Je pense qu'il a été introduit dans iOS9 et que cette balise devrait être suffisante en termes de versions iOS
Julian Król

Réponses:

469

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

Entrez la description de l'image ici

<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>
Anit Kumar
la source
29
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
jww
6
@jww C'est le but de cet article. Le site auquel je dois me connecter pour lire de l'audio n'utilise pas encore HTTPS et je n'essaie pas d'attendre.
ThinkDigital
5
Cela ne fonctionnera pas dans iOS 10.0+ ou MacOS 10.12+. Il est en fait dit d'autoriser toutes les charges arbitraires SAUF celles mentionnées (exemple.com). Ainsi, cela ferait l'inverse de ce qui est souhaité. NSAllowsArbirtraryLoads doit être défini sur false ici. plus d'informations: Apple docs
Freek Sanders
1
D'accord, pourquoi diable tout le monde vote-t-il cela? il est inutile d'utiliser NSAllowsArbitraryLoads si vous définissez un domaine d'exception.
thibaut noah
1
NSAllowsArbitraryLoads n'a pas besoin d'être vrai, il doit donc être supprimé. NSExceptionDomains est suffisant pour permettre une connexion non sécurisée à ce domaine uniquement. NSAllowsArbitraryLoads = true permettra une connexion non sécurisée à n'importe quel domaine, donc si le définir toujours sur true rend le non-sens NSExceptionDomains comme il inclut déjà tous les domaines
mister_giga
950

Utilisez NSAppTransportSecurity:

Entrez la description de l'image ici

Vous devez définir la clé NSAllowsArbitraryLoads sur YES sous le dictionnaire NSAppTransportSecurity dans votre fichier info.plist.

Configuration de plist

User123335511231
la source
157
Faites-le savoir: CECI EST UN CONTOURNEMENT! Chaque fois que vous utilisez HTTP sur HTTPS, vous ouvrez les appareils de vos utilisateurs à des vulnérabilités. Bien sûr, c'est peu probable dans de nombreux cas, mais la programmation éthique est la meilleure pratique. Just sayin '... - aussi, +1 pour le travail (à des fins de test)
Jacksonkr
36
Ce n'est PAS une solution - c'est un HACK! Pour ajouter des "exceptions" de domaine individuelles, voir cette réponse ci-dessous: stackoverflow.com/a/32560433/1103584
DiscDev
17
Bien que cette solution soit connue pour être vulnérable, c'est la seule solution que je recommanderais pendant le DÉVELOPPEMENT . Devoir taper chaque domaine exact pendant le développement est tout simplement stupide (surtout si vous utilisez des services Web tiers).
date du
6
Le nom de ces clés a changé maintenant "Paramètres de sécurité du transport d'application" sous "Autoriser les charges arbitraires"
vishal dharankar
11
Pourquoi tant de gens sont-ils contre cette solution? Ce n'est certainement pas un hack! De nombreuses applications doivent communiquer avec Internet, où le protocole de sécurité n'est pas toujours sous votre contrôle. Par exemple, il semble très raisonnable de pouvoir afficher des images provenant d'autres serveurs qui n'ont pas de certificat SSL.
Oren
825

Voici les paramètres visuellement:

paramètres visuels pour NSAllowsArbitraryLoads dans info.plist via Xcode GUI

William Cerniuk
la source
10
Je n'ai pas cette option.
Utilisateur
25
Si vous ouvrez directement votre Info.plist, vous pouvez simplement ajouter le dictionnaire NSAppTransportSecurity , puis créer l' élément NSAllowsArbitraryLoads à l'intérieur de celui-ci (voir la réponse éditée par Umar Farooq, ci-dessous).
Stoph
3
Même chose ici - les domaines d'exception ne fonctionnaient pas avec 7.3 pour moi.
RegularExpression
4
Cette option n'existe pas - XCode 7.3.1
jameshfisher
3
Les informations de @JoshPinter ont fonctionné pour moi avec XCode 8.
Matthew Bellantoni
717

Voir le post du forum Application Transport Security? .

Également la page Configuration des exceptions de sécurité du transport d'application 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 afin que vous puissiez placer ce code plus ou moins n'importe où dans le fichier.

KMLong
la source
1
Comment puis-je faire cela, je veux dire quelle est la façon d'ajouter ce code à Info.plist parce que je ne sais pas où coller ce code?
lmiguelvargasf
2
@lmiguelvargasf ouvrez votre info.plist dans un éditeur de texte brut
Dan Beaulieu
7
J'obtiens toujours l'erreur: le domaine d'exception est défini et NSAllowsArbitraryLoads est faux. Même avec NSAllowsArbitraryLoads défini sur true, l'erreur apparaît. Quelqu'un d'autre ici a ce problème?
klaevv
3
Au 30/01/2016, le document Apple montre que les clés ne contiennent plus le mot temporaire, par exemple: NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion Voir developer.apple.com/library/prerelease/ios/documentation/…
Philippe Monnet
3
Dans le cas où quelqu'un d' autre tire les cheveux parce que faire ces changements simples à info.plist ne fonctionne pas .. ajouter les modifications à projets> Target> Info> iOS personnalisés Propriétés de la cible
BlueGuy
330

Cela a été testé et fonctionnait sur la graine GM d'iOS 9 - c'est la configuration pour permettre à un domaine spécifique d'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>

NSAllowsArbitraryLoadsdoit être false, car il interdit toute connexion non sécurisée, mais la liste des exceptions autorise la connexion à certains domaines sans HTTPS.

Sound Blaster
la source
7
CECI devrait être marqué comme réponse. Testé et fonctionnant sur la graine iOS 9 GM pour permettre à un domaine spécifique d'utiliser http sans prendre le chemin "paresseux" et ouvrir complètement votre application.
DiscDev
2
Comment ajouter ceci à mon info.plist?
JMStudios.jrichardson
8
Ok, j'ai ajouté cette entrée à mon info.plist et je reçois toujours cette erreur - "App Transport Security a bloqué une charge de ressources HTTP (http: //) en texte clair car elle n'est pas sécurisée. Des exceptions temporaires peuvent être configurées via les informations de votre application fichier .plist. "
KMC
2
@RomanShapovalov si vous devez utiliser une adresse IP, essayez d'ajouter .xip.io à la fin de l'adresse IP et ajoutez xip.io à vos NSExceptionDomains. Voir xip.io . Je me connecte directement à IP lors du développement (mais pas à la sortie) et cela fonctionne très bien pour moi.
tpankake
2
Ne fonctionnait pas pour moi jusqu'à ce que je réalise que je l'avais mis dans la mauvaise info.plist dans mon projet de test. Assurez-vous de le mettre dans le bon!
Chucky
144

Voici une solution rapide (mais non recommandée) pour ajouter ceci dans la liste:

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

Ce qui signifie (selon la documentation d' Apple ):

NSAllowsArbitraryLoads
Valeur booléenne utilisée pour désactiver App Transport Security pour tous 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 NO requiert le comportement de sécurité de transport d'application par défaut pour toutes les connexions.

Je recommande vraiment les liens:

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

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

<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_OVERRIDEpermettra aux connexions d'utiliser le protocole HTTP.

Au XML ci-dessus, vous pouvez ajouter:

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

si vous souhaitez autoriser les 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 savons correctes.

Pour les lecteurs intéressés

Mise à jour 2018:

Apple ne recommande pas de désactiver cette option - plus d'informations peuvent être trouvées dans 207 session WWDC 2018 avec plus de détails sur la sécurité

Laisser la réponse originale pour des raisons historiques et la phase de développement

Julian Król
la source
1
NSAllowsArbitraryLoadsdoit êtrefalse
Sound Blaster
@SoundBlaster pour quel cas et ce que vous voyez mal dans ma réponse au vote négatif?
Julian Król
en ajoutant dans plist (NSAppTransportSecurity NSAllowsArbitraryLoads), tous les services Web fonctionnent correctement sauf un service Web, un service Web renvoie une erreur de serveur interne (500) dans iOS 9 mais fonctionne correctement dans iOS8 ou version ultérieure
amit gupta
@SoundBlaster a fait un changement, maintenant vous ne devriez pas avoir d'objections :)
Julian Król
Merci, comment ajoutez-vous réellement le <key>NSIncludesSubdomains</key> <true/>? Faut-il entourer chaque décor <dict>? comment éditez-vous ce fichu fichier plist? Quelle est la mise en forme? : D Merci.
Agent Zebra
116

Pour ceux d'entre vous qui veulent plus de contexte sur la raison pour laquelle cela se produit, en plus de savoir comment y remédier, lisez ci-dessous.

Avec l'introduction d'iOS 9, pour améliorer la sécurité des connexions entre une application et les 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 App Transport Security pour:

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

Comme expliqué dans l' App Transport Security Technote , 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 le protocole TLS (Transport Layer Security) version 1.2.
  • Les chiffrements de connexion sont limités à ceux qui fournissent le secret de retransmission (voir la liste des chiffrements ci-dessous.)
  • Les certificats doivent être signés à l'aide d'un algorithme de hachage de signature SHA256 ou supérieur, avec une clé RSA de 2048 bits ou supérieure ou une clé ECC (256 bits ou supérieure de courbe elliptique).
  • 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 cryptée à l'aide de TLS v1.2 avec retransmission.

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


Pour remplacer, vous devrez ajouter les NSAppTransportSecurity> NSExceptionDomainspropriétés du dictionnaire à votre Info.plist. Ensuite, vous ajouterez le domaine de votre service Web au NSExceptionDomainsdictionnaire.

Par exemple, si je veux contourner le comportement de sécurité du transport d'application pour un service Web sur l'hôte www.yourwebservicehost.com, je ferais ce qui suit:

  1. Ouvrez votre application dans Xcode.

  2. Recherchez le Info.plistfichier dans Project Navigator et cliquez avec le bouton droit de la souris dessus et choisissez l' option de menu Ouvrir en tant que > code source . Le fichier de liste de propriétés apparaîtra dans le volet droit.

  3. Placez le bloc de propriétés suivant dans le dictionnaire de propriétés principal (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 en dessous NSExceptionDomains.

Pour en savoir plus sur les touches référencées ci-dessus, lisez cette note technique déjà mentionnée .

pourquoice blanc
la source
1
Cela a fonctionné dans 2 de mes applications, mais cela ne fonctionne pas sur une 3ème. Quelqu'un d'autre a-t-il rencontré une situation d'utilisation du correctif ci-dessus et toujours le même message d'erreur? (et oui j'ai mis à jour le dictionnaire pour utiliser mon domaine API, pas celui du code)
helloB
Meilleur ! Apple confirme que cette solution utilise
YannSteph
Cela a fonctionné pour un fichier d'édition d'application Cordova / Phonegap / Ionic ./platforms/ios/<project>/<project>-Info.plistavec NSAllowsArbitraryLoads=falseet de nombreux domaines d'exception vers des services avec différentes combinaisons TLS / HTTP / HTTPS. Initialement utilisé, NSAllowsArbitraryLoads=truepuis ajusté, dépannage des règles par essais et erreurs pour se conformer aux directives et soumettre pour approbation. Les config.xml <access origin=.../>instructions de note remplissent partiellement ce fichier, mais nécessitent actuellement un ajustement par modification directe ou via XCode pour obtenir les détails corrects.
jimmont
Aussi <access origin="*"/>(dans config.xml) définit NSAllowsArbitraryLoads=true(pour les applications Cordova / Phonegap / hybrides
jimmont
Pourquoi est-il NSExceptionAllowsInsecureHTTPLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
jww
67

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

  • Cliquez sur Info.plist dans le navigateur à gauche.
  • Modifiez maintenant 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 d'application
    • Faites un clic droit sur le groupe et sélectionnez Add Row
    • Entrez Autoriser les charges arbitraires
    • Réglez la valeur de droite sur OUI

Exemple

Vincent
la source
Pour clarifier: si «Autoriser les charges arbitraires» est OUI et qu'il existe des «domaines d'exception», les charges autorisées sont limitées à celles des domaines d'exception. Est-ce exact?
est-ce un moyen sûr de le faire si je veux libérer l'application?
Lamour
Non. En autorisant des chargements arbitraires, votre application peut se connecter librement à n'importe quel domaine. Du point de vue de la sécurité, vous devez contrôler et limiter le domaine / site Web auquel l'application doit se connecter, pour éviter une utilisation réseau inattendue.
Raptor
La plupart des applications sont acheminées uniquement vers des serveurs connus. Ceci est contrôlé par le développeur. Les problèmes de sécurité sont donc connus.
Vincent
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur YES? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
2017
25

Document Apple 1

Document Apple 2

Il existe deux solutions pour cela:

Solutions 1:

  1. Dans le Info.plistfichier, ajoutez un dictionnaire avec la clé ' NSAppTransportSecurity'
  2. Ajouter un autre élément dans le dictionnaire avec la clé 'Allow Arbitrary Loads'

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

Solution 1

Solution 2:

  1. Dans le Info.plistfichier, ajoutez 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 une clé 'MyDomainName.com'de type NSDictionary
  4. Ajouter un élément avec la clé ' NSIncludesSubdomains' de type Booleanet de valeur définis commeYES
  5. Ajouter un élément avec la clé ' NSTemporaryExceptionAllowsInsecureHTTPLoads' de type Booleanet de valeur définis commeYES

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

Solution 2

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

Jayprakash Dubey
la source
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur YES? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
jww
20

La sécurité du transport est disponible sur iOS 9.0 ou version ultérieure. Vous pouvez avoir cet avertissement lorsque vous essayez d'appeler un WS dans votre application:

Application Transport Security a bloqué une charge de ressources HTTP (http: //) en texte clair car elle n'est pas sécurisée. Les exceptions temporaires peuvent être configurées via le fichier Info.plist de votre application.

L'ajout de ce qui suit à votre Info.plist désactivera ATS:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>
Malek Belkahla
la source
1
NSAllowsArbitraryLoads doit être faux, s'il est vrai, il autorise toutes les connexions non sécurisées
Thiago Arreguy
en ajoutant dans plist tous les services Web fonctionnent correctement, sauf un service Web, un service Web renvoie une erreur de serveur interne (500) dans iOS 9, mais fonctionne correctement dans iOS8 ou version ultérieure
amit gupta
1
Accepté sur le magasin?
Vrashabh Irde
Très mauvais conseil; voir Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Étant donné la question, si elle est pleine de la façon recommandée de faire les choses, des réponses «moi aussi» comme celle-ci ne sont pas nécessaires.
jww
15

Exemple de développement

Voici une capture d'écran d'une liste qui garde ATS intact (= sécurisé), mais permet que les connexions à l' hôte local puissent être établies via HTTP au lieu de HTTPS . Cela fonctionne dans Xcode 7.1.1.

Entrez la description de l'image ici

Sébastien
la source
Existe-t-il des moyens de sécuriser localhost, c'est-à-dire en utilisant HTTPS, en react-native afin que nous n'ayons pas à utiliser la NSExceptionAllowsInsecureHTTPLoads - YESconfiguration par défaut ?
milkersarac
13

Accédez à votre Info.plist

  1. Faites un clic droit sur un espace vide et cliquez sur Ajouter une ligne
  2. Écrivez le nom de la clé comme NSAppTransportSecurity, en dessous
  3. Sélectionnez les domaines d'exception, ajoutez un nouvel élément à ce
  4. Notez votre nom de domaine qui doit être consulté
  5. Changez le type de domaine de chaîne en dictionnaire, ajoutez un nouvel élément
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, qui sera un booléen avec une vraie valeur. Regardez l'image pour la suivre correctement
Shailendra Suriyal
la source
1
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
2017 à 4h05
13

Selon Apple, la désactivation générale de l'ATS entraînera le rejet de l'application, sauf si vous avez une bonne raison de le faire. Même dans ce cas, vous devez ajouter des exceptions pour les domaines auxquels vous pouvez accéder en toute sécurité.

Apple a un excellent outil qui vous indique exactement quels paramètres utiliser: dans Terminal, entrez

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

et nscurl vérifiera si cette demande échoue, puis essayera une variété de paramètres et vous dira exactement lequel passe, et quoi faire. Par exemple, pour une URL tierce que je visite, cette commande m'a dit que ce dictionnaire réussit:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

Pour distinguer entre vos propres sites et les sites tiers qui sont hors de votre contrôle, utilisez, par exemple, la clé NSThirdPartyExceptionRequiresForwardSecrecy.

gnasher729
la source
1
son excellent outil pour vérifier avant de tester réellement avec l'application. gagner du temps. mais toute ressource à lire pour comprendre le résultat de cette commande.
damithH
1
Outil intéressant. Dans mon cas, cela exagère cependant les choses. Il répertorie trois clés NSExceptionAllowsInsecureHTTPLoads = true;, mais il s'avère que celle-ci n'est pas nécessaire.
Chris Prince
11

Déterminer quels paramètres utiliser peuvent être effectués automatiquement, comme mentionné dans cette note technique :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
écotaxe
la source
Vous avez apparemment besoin d'OS X 10.11 (El Capitan) pour cela.
écotaxe du
10

REMARQUE: le domaine d'exception dans votre liste doit être en MAJUSCULES.

Exemple: vous avez nommé votre machine "MyAwesomeMacbook" sous Paramètres-> Partage; votre serveur (à des fins de test) fonctionne sur MyAwesomeMacbook.local: 3000 et votre application doit envoyer une demande à http: //MyAwesomeMacbook.local: 3000 / files ..., votre plist vous devrez spécifier "myawesomemacbook. local "comme domaine d'exception.

-

Votre info.plist contiendrait ...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>
ObjectiveTC
la source
9

Utilisation:

Capture d'écran PList pour mieux comprendre

Ajoutez un nouvel élément, NSAppTransportSecurity , dans le fichier plist avec le type Dictionary , puis ajoutez le sous-élément NSAllowsArbitraryLoads dans le dictionnaire de type Boolean et définissez la valeur booléenne YES . Cela fonctionne pour moi.

Tejinder
la source
1
NSAllowsArbitraryLoads doit être faux, s'il est vrai, il autorise toutes les connexions non sécurisées
Thiago Arreguy
en ajoutant dans plist tous les services Web fonctionnent correctement, sauf un service Web, un service Web renvoie une erreur de serveur interne (500) dans iOS 9, mais fonctionne correctement dans iOS8 ou version ultérieure @ThiagoArreguy
amit gupta
Très mauvais conseil; voir Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Étant donné la question, si elle est pleine de la façon recommandée de faire les choses, des réponses «moi aussi» comme celle-ci ne sont pas nécessaires.
jww
Je sais que c'est un mauvais conseil, mais c'est juste une solution pour le moment en mode développement uniquement. Apple nous a fourni de la flexibilité, si c'est vraiment mauvais, ils ne le permettraient pas.
Tejinder
9

Le 2015-09-25 (après les mises à jour de Xcode le 2015-09-18):

J'ai utilisé une méthode non paresseuse, mais cela n'a pas fonctionné. Les suivants sont mes essais.

Première,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Et deuxieme,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Enfin, j'ai utilisé la méthode paresseuse:

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

Cela peut être un peu précaire, mais je n'ai pas pu trouver d'autres solutions.

Heedoo
la source
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
jww
9

Dans swift 4 et xocde 10, modifiez NSAllowsArbitraryLoads pour autoriser les charges arbitraires. donc ça va ressembler à ça:

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>
Faris
la source
6

Il peut être utile de mentionner comment s'y rendre ...

Info.plist est l'un des fichiers sous le Main.storyboard ou viewController.swift.

Lorsque vous cliquez dessus pour la première fois, il est généralement sous forme de tableau, donc cliquez avec le bouton droit sur le fichier et ouvrez-le comme code source, puis ajoutez le code ci-dessous vers la fin, c'est-à-dire:

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

Copiez collez le code juste au-dessus

 "</dict>
</plist>"

qui est à la fin.

Naishta
la source
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
2017
5

Mise à jour pour Xcode 7.1, face au problème 27.10.15:

La nouvelle valeur dans Info.plist est "App Transport Security Settings". De là, ce dictionnaire devrait contenir:

  • Autoriser les charges arbitraires = OUI
  • Domaines d'exception (insérez ici votre domaine http)
MkaysWork
la source
4

Pour ceux qui sont venus ici en essayant de trouver la raison pour laquelle leur WKWebView est toujours blanc et ne charge rien (exactement comme décrit ici, comment puis-je faire fonctionner WKWebView en swift et pour une application macOS ):

Si toute la science des fusées ci-dessus ne fonctionne pas, vérifiez l'évidence: les paramètres du bac à sable

paramètres du bac à sable]

Étant nouveau dans swift et cacao, mais assez expérimenté en programmation, j'ai passé environ 20 heures à trouver cette solution. Aucun des dizaines de tutoriels hipster-iOS ni des notes de présentation Apple - rien ne mentionne cette petite case à cocher.

Alekseev Vladimir
la source
Oh mon dieu, merci beaucoup! Vous m'avez sauvé la même recherche de 20 heures!
Brecht Machiels
2
ne pas voir cette section dans la section Capacités de la cible (Xcode 9.4.1)
shim
3

Par défaut, iOS n'autorise que l'API HTTPS. Étant donné que HTTP n'est pas sécurisé, vous devrez désactiver la sécurité du transport d'application. Il existe deux façons de désactiver ATS: -

1. Ajout du code source dans le projet info.plist et ajoutez le code suivant dans la balise racine.

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

2. Utilisation des informations sur le projet.

Cliquez sur projet dans le projet dans le volet gauche, sélectionnez le projet comme cible et choisissez l'onglet info. Vous devez ajouter le dictionnaire dans la structure suivante.

entrez la description de l'image ici

varunrathi28
la source
3

Comment le réparer?

entrez la description de l'image ici

Ci-dessous les étapes pour le réparer.

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Kamani Jasmin
la source
1

L'utilisation NSExceptionDomainspeut ne pas appliquer simultanément un effet car le site cible peut charger des ressources (par exemple des jsfichiers) à partir de domaines externes http. Il peut être résolu en ajoutant également ces domaines externes NSExceptionDomains.

Pour inspecter les ressources qui ne peuvent pas être chargées, essayez d'utiliser le débogage à distance. Voici un tutoriel: http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/

Nurlan Akashayev
la source
0

Pour Cordova, si vous souhaitez l'ajouter dans votre ios.json, procédez comme suit:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

Et cela devrait être à l'intérieur de:

"*-Info.plist": {
   "parents": {
   }
}
zeusstl
la source
<Access origin = "*" /> dans config.xml n'a pas fonctionné. Je ne sais pas si les deux sont nécessaires, mais la solution ios.json a scellé l'accord pour moi.
zeusstl
Pourquoi est-il NSAllowsArbitraryLoadsréglé sur true? Vous détournez l'objectif d'ATS. Voir aussi Le code le plus dangereux du monde: valider les certificats SSL dans un logiciel non navigateur . Votre logiciel vient de faire la liste.
jww
-1

Comme beaucoup l'ont remarqué, il s'agit d'un problème de fonctionnalité fourni avec iOS 9.0. Ils ont ajouté une chose appelée App Transport Security, et moi aussi j'étais ennuyé quand cela a cassé mes applications.

Vous pouvez le bander avec la clé NSAllowsArbitraryLoads sur YES sous le dictionnaire NSAppTransportSecurity dans votre fichier .plist, mais vous devrez finalement réécrire le code qui forme vos URL pour former le préfixe HTTPS: //.

Apple a réécrit la classe NSUrlConnection dans iOS 9.0. Vous pouvez en lire plus dans NSURLConnection .

Sinon, vous devrez peut-être abandonner iOS 9.0 jusqu'à ce que vous ayez le temps de mettre en œuvre la bonne solution.

Mark DeWald
la source