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.plist
de votre application.
Pour remplacer, vous devrez ajouter les NSAppTransportSecurity
> NSExceptionDomains
propriétés du dictionnaire à votre Info.plist
. Ensuite, vous ajouterez le domaine de votre service Web au NSExceptionDomains
dictionnaire.
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:
Ouvrez votre application dans Xcode.
Recherchez le Info.plist
fichier 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.
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 .