web-dev-qa-db-fra.com

Désactiver la sécurité du transport d'application dans Xcode 9.2?

Je ne peux pas désactiver App Transport Security (ATS) dans Xcode 9.2. Pendant des années, j'ai désactivé ATS lors de l'exécution de versions sur mon environnement de serveur local, comme ceci:

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

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

Dans Xcode 9.2, une simple requête (s'exécutant sur une application Rails locale en mode http):

let session = URLSession(configuration: .default)
let url = URL(string: "http://store.dev/api/products.json")!

let task = session.dataTask(with: url) { data, response, error in
    print(data)
    print(response)
    print(error)
}

task.resume()

échoue avec le message d'erreur 

Error Domain = NSURLErrorDomain Code = -1200 "Une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être établie." UserReignage _kCFStreamErrorDomainKey = 3, _kCFStreamErrorCodeKey = -9802}}, NSLocalizedDescription = Une erreur SSL s'est produite et une connexion sécurisée au serveur n'a pas pu être établie., NSErrorFailingURLKey = https://store.dev/api/products.json , NSErrorFailingURLStringKey = https://store.dev/api/products.json , _kCFStreamErrorDomainKey = 3}

Cette même demande exacte (même projet) aboutit sur Xcode 9.1. 

Dans les deux cas, je construis contre une cible de déploiement iOS 11.1. Vous pouvez voir que Xcode modifie l'URL de http à https, ce que je ne veux pas. 

Voici un lien vers le projet super basique fonctionnant sous Xcode 9.1 mais échouant sous 9.2 ( https://github.com/chrismanderson/ats-sample ).

J'ai également essayé de désactiver ATS uniquement pour le domaine store.dev local et, encore une fois, cela fonctionne sur Xcode 9.1 mais pas sur 9.2.

9
chrismanderson

Je ne l'avais pas conçu à l'origine, mais je pense qu'en réalité, avec iOS 11, Apple prend en charge HSTS . Je crois que la prise en charge des listes de préchargement HSTS, en combinaison avec Google récemment l'ajout du TLD .dev à la liste de préchargement HSTS , est probablement à l'origine du fait que iOS essaie de vous forcer à utiliser https essayons d'utiliser un domaine local .dev pour les tests, ce qui est vraiment l'élément clé ici). 

Je pense que votre seule solution est de changer votre domaine de test local en un domaine autre que le domaine .dev. Si vous faites cela, vous devriez être capable de vous connecter, et cela n'essaiera pas de vous forcer à https sur votre environnement de développement local. 

En bref, Google a obtenu les droits sur le domaine de premier niveau .dev et l'a récemment ajouté à la liste de préchargement HSTS pour forcer la sécurité de toutes les communications avec les domaines .dev. Sur les appareils prenant en charge les listes de préchargement HSTS, tout le trafic est redirigé via HTTPS, ce qui entraîne des erreurs sur les serveurs qui ne prennent pas en charge HTTPS. 

7
wottle

Dans le navigateur situé à gauche de l'écran dans XCode, cliquez sur le fichier de votre projet principal dans lequel sont stockés tous les fichiers et dossiers. Cliquez sur l'onglet Info. Sous "Propriétés de la cible iOS personnalisée", vous voyiez une option permettant de modifier les paramètres de sécurité du transport d'application (ATS). Ce n'est pas explicitement indiqué, mais toujours disponible. 

Lorsque vous passez la souris sur les options, vous devriez voir un + dans un petit cercle. Clique dessus. XCode vous invitera à créer une "catégorie d'application". Dans la liste qui apparaît, faites défiler vers le haut et sélectionnez "Paramètres de sécurité App Transport". 

Cliquez sur cette option. Une fois que cela est créé, il devrait vous inviter à modifier la valeur BOOL (la valeur par défaut devrait être "NO"). À l'extrême droite, vous devriez voir un ensemble de flèches haut et bas. Cliquez dessus pour changer le BOOL en oui.

0
Hugo Budd