Comment charger une URL HTTP avec la sécurité de Transport App activée dans iOS 9? [dupliquer]

cette question a déjà une réponse ici:

donc, le nouveau beta SDK d'iOS sorti hier soir a" App Transport Security " qui encourage les développeurs à utiliser https au lieu de http. En principe, c'est un excellente idée, et j'utilise déjà https dans nos environnements de mise en scène/production. Cependant, je n'ai pas de https installé dans mon environnement de développement local, lorsque l'application iOS se connecte à un service web que j'utilise sur mon ordinateur portable.

D'après un peu de lecture ce matin, il semble que le système de chargement D'URL, même si vous lui donnez une URL http, décidera d'utiliser https à la place. Est-ce que quelqu'un sait comment désactiver ce comportement -- même juste pour des URLs particulières?

388
demandé sur soulshined 2015-06-09 15:15:09
la source

8 ответов

See Apple '151930920" Info.référence plist pour plus de détails (merci @gnasher729).

vous pouvez ajouter des exceptions pour des domaines spécifiques dans vos informations.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

toutes les clés pour chaque domaine excepté sont optionnelles. Le conférencier n'a pas donné de détails sur les clés, mais je pense qu'elles sont toutes assez évidentes.

(Source: de la WWDC 2015 session 703, "vie privée et Votre Application" , 30: 18)

vous pouvez également ignorer toutes les restrictions de sécurité de transport app avec une seule clé, si votre application a une bonne raison de le faire:

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

si votre application n'a pas une bonne raison, vous pouvez risquer le rejet:

mettre NSAllowsArbitraryLoads à true lui permettra de fonctionner, mais Apple a été très clair en ce qu'ils ont l'intention de rejeter les applications qui utilisent ce drapeau sans une raison spécifique. La principale raison d'utiliser NSAllowsArbitraryLoads je peux penser serait le contenu créé par l'utilisateur (lien de partage, navigateur web personnalisé, etc). Et dans ce cas, Apple s'attend toujours à ce que vous incluiez des exceptions qui forcent L'ATS pour les URLs que vous contrôlez.

si vous avez besoin d'accéder à des URLs spécifiques qui ne sont pas servies sur TLS 1.2, vous devez écrire des exceptions spécifiques pour ces domaines, n'utilisez pas NSAllowsArbitraryLoads défini à yes. Vous pouvez trouver plus d'informations dans la session NSLSSSION WWDC.

s'il vous plaît soyez prudent dans le partage de la solution NSAllowsArbitraryLoads. Ce n'est pas la solution recommandée par Apple.

- kcharwood (merci @marco-tolman)

636
répondu adurdin 2015-12-16 16:20:32
la source

accepté de répondre a fourni les informations nécessaires, et pour plus d'informations sur l'utilisation et la la désactivation de l'Application de la Sécurité des Transports, on peut trouver de plus sur ce .

Pour Par Domaine Exceptions ajoutez-les à la Info.plist :

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

Mais Que Faire si Je ne connais pas tous les domaines non sécurisés que je dois utiliser? Utilisez la touche suivante dans votre Info .plist

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

pour plus de détails, vous pouvez consulter ce lien.

94
répondu Akshay Sunderwani 2015-08-03 10:04:15
la source

suivi de ce .

Je l'ai résolu en ajoutant une clé dans l'information.plist. Les étapes que j'ai suivies sont les suivantes:

  1. Ouvert mes Projets info.plist fichier

  2. a ajouté une clé appelée NSAppTransportSecurity comme Dictionary .

  3. a ajouté une sous-clé appelée NSAllowsArbitraryLoads comme Boolean et a fixé sa valeur à YES comme similaire image suivante. enter image description here

nettoyer le projet et maintenant tout va bien comme avant.

Ref Lien .

49
répondu Manab Kumar Mal 2017-05-23 15:10:26
la source

si vous voulez juste désactiver la Politique de Transport App pour les serveurs dev locaux, alors les solutions suivantes fonctionnent bien. C'est utile lorsque vous n'êtes pas en mesure, ou qu'il n'est pas pratique, de configurer HTTPS (par exemple en utilisant le serveur de développement de Google App Engine).

comme d'autres l'ont dit, L'ATP ne devrait certainement pas être désactivé pour les applications de production.

1) Utiliser un autre plist pour déboguer

Copiez votre fichier Plist et NSAllowsArbitraryLoads. Utilisez ce plugin pour déboguer.

XCode Debug

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

2) exclure les serveurs locaux

Alternativement, vous pouvez utiliser un seul fichier plist et exclure des serveurs spécifiques. Cependant, il ne semble pas que vous puissiez exclure les adresses IP 4 donc vous pourriez avoir besoin d'utiliser le nom du serveur à la place (trouvé dans Préférences Système - > Partage, ou configuré dans votre DNS local).

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>server.local</key>
        <dict/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
</dict>
29
répondu Ian 2017-05-23 15:10:26
la source

j'ai résolu en tant que fichier plist.

  1. Ajouter un NSAppTransportSecurity : Dictionary.
  2. Ajouter une sous-Clé nommée "NSAllowsArbitraryLoads" comme Booléenne : OUI

enter image description here

26
répondu Avinash651 2015-10-08 08:54:33
la source
Les Configurations

ci-dessus n'ont pas fonctionné pour moi. J'ai essayé beaucoup de combinaisons de touches, ce beau travail:

enter image description here

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mydomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
19
répondu Damien Romito 2015-09-25 13:02:03
la source

compilant les réponses données par @adurdin et @User

ajoutez des suivants à vos informations.plist & change localhost.com avec votre nom de domaine correspondant, vous pouvez ajouter plusieurs domaines ainsi:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>
</plist>

vous info.plist doit ressembler à ceci:

enter image description here

15
répondu Aqib Mumtaz 2015-08-11 16:26:12
la source

voici ce qui a fonctionné pour moi:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key><!-- your_remote_server.com / localhost --></key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    <!-- add more domain here -->
    </dict>
</dict>

je veux juste ajouter ceci pour aider les autres et gagner du temps:

si vous utilisez: CFStreamCreatePairWithSocketToHost . assurez-vous que votre host est le même que celui que vous avez dans votre .plist ou si vous avez un domaine séparé pour socket, ajoutez-le là.

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)/*from .plist*/, (unsigned int)port, &readStream, &writeStream);

J'espère que c'est utile. Acclamation. :)

12
répondu 0yeoj 2015-10-23 08:53:09
la source

Autres questions sur ios url ios9 nsurl app-transport-security