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