Erreur SSL iOS 9 ATS avec server de support

J'ai installé Xcode 7 et essayé d'exécuter mon application sous iOS 9. Je reçois l'erreur infâme: Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. Connection failed! Error - -1200 An SSL error has occurred and a secure connection to the server cannot be made. La chose est que mon server supporte TLSv1.2 et j'utilise NSURLSession .

Quel pourrait être le problème alors?

Apple a publié la list complète des exigences pour la security de transport App .

Il s'est avéré que nous travaillions avec TLS v1.2 mais manquions certaines des autres exigences.

Voici la list complète des vérifications:

  1. TLS nécessite au less la version 1.2.
  2. Les chiffrements de connection sont limités à ceux qui fournissent le secret de transfert (voir ci-dessous pour la list des chiffrements.)
  3. Le service requirejs un certificate utilisant au less une empreinte SHA256 avec une key RSA de 2048 bits ou plus, ou une key Elliptic-Curve (ECC) de 256 bits ou plus.
  4. Les certificates non valides entraînent une défaillance matérielle et aucune connection.

Les numbers acceptés sont:

 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 

Dans iOS9, Apple a ajouté une nouvelle fonctionnalité appelée App Transport Security (ATS).

ATS applique les meilleures pratiques lors des appels réseau, y compris l'utilisation de HTTPS.

Apple Pre-release documentation:

L'ATS empêche la divulgation accidentelle, fournit un comportement par défaut sécurisé et est facile à adopter. Vous devriez adopter ATS dès que possible, que vous créiez une nouvelle application ou que vous en mettiez une à jour.

Si vous développez une nouvelle application, vous devez utiliser HTTPS exclusivement. Si vous avez une application existante, vous devez utiliser HTTPS autant que vous le pouvez en ce moment, et créer un plan pour migrer le rest de votre application dès que possible.

Ajouter la key ci-dessous dans votre info.plist et ensuite voir.

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

Même vous pouvez append une exception spécifique,

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>testdomain.com</key> <dict> <key>NSIncludesSubdomains</key> <false/> <key>NSExceptionAllowInsecureHTTPSLoads</key> <false/> <key>NSExceptionRequiresForwardSecrecy</key> <true/> <key>NSExceptionMinimumTLSVersion</key> <ssortingng>TLSv1.2</ssortingng> <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key> <false/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <true/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <ssortingng>TLSv1.2</ssortingng> <key>NSRequiresCertificateTransparency</key> <false/> </dict> ... </dict> </dict> 

Découvrez ce document que apple fourni.

J'ai eu un problème similaire à l'exécution sur iOS 9 et ce que j'ai fait pour le réparer a été ajouté le dictionary NSAppTransportSecurity à mon file info.plist avec le Bool NSAllowsArbitraryLoads défini à true et après le nettoyage et la reconstruction a fonctionné.

J'espère que ça aide!

Pour moi, le proxy bloquait essayer d'utiliser Internet à partir de différentes sources permettra de résoudre le problème. Wifi, Lan, etc.