est-ce que quelqu'un avec iOS 9 beta 1 a eu ce problème?
J'utilise NSURLConnection standard pour me connecter à un webservice et dès qu'un appel est fait vers le webservice, j'obtiens l'erreur ci-dessous. Cela fonctionne actuellement dans iOS 8.3
Bug bêta possible? toutes les idées ou pensées seraient super! Je sais que c'est très tôt dans le développement d'iOS 9
Voici l'erreur complète:
CFNetwork SSLHandshake a échoué (-9824) Échec du chargement HTTP NSURLSession / NSURLConnection (kCFStreamErrorDomainSSL, -9824)
NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]];
NSURLResponse * response = nil;
NSError * error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
la source
Dans iOS 10+, la chaîne TLS DOIT être de la forme "TLSv1.0". Ce ne peut pas être simplement "1.0". (Soupir)
La combinaison suivante des autres réponses fonctionne.
Supposons que vous essayez de vous connecter à un hôte (YOUR_HOST.COM) qui ne dispose que de TLS 1.0.
Ajoutez-les à Info.plist de votre application
la source
NSTemporaryExceptionRequiresForwardSecrecy
fait l'affaire pour moi, merci!Pour plus d'informations Configuration des exceptions de sécurité du transport d'application dans iOS 9 et OSX 10.11
Cette expédition d'une application avec App Transport Security couvre quelques bons conseils de débogage
Échec ATS
CFNETWORK_DIAGNOSTICS
nscurl
la source
Si votre backend utilise une connexion sécurisée et vous obtenez en utilisant NSURLSession
vous devez vérifier la configuration de votre serveur en particulier pour obtenir la version ATS et le certificat SSL Info:
Au lieu de simplement autoriser une connexion non sécurisée en définissant
NSExceptionAllowsInsecureHTTPLoads = YES
, vous devez plutôt autoriser une sécurité réduite au cas où votre serveur ne répondrait pas à l'exigence minimale (v1.2) pour ATS (ou mieux pour corriger côté serveur).Permettre une sécurité réduite à un seul serveur
utilisez le client openssl pour étudier le certificat et obtenir la configuration de votre serveur à l'aide du client openssl:
..trouver à la fin
App Transport Security (ATS) requiert le protocole Transport Layer Security (TLS) version 1.2.
Conditions requises pour la connexion à l'aide d'ATS:
Mise à jour: il s'avère que openssl ne fournit que la version minimale du protocole Protocole: liens TLSv1
la source
Après deux jours de tentatives et d'échecs, ce qui a fonctionné pour moi, c'est ce code de womble
avec un changement, selon cet article, nous devrions cesser d'utiliser les sous-clés associées au dictionnaire NSExceptionDomains de ce type de convention
Et utiliser à la nouvelle Convention
au lieu.
documentation Apple
mon code
la source
Un autre outil utile est nmap (installer bmap nmap)
Donne une sortie
la source
Cette erreur apparaissait parfois dans les journaux lorsque j'utilisais une version iOS de Cordova buggy / crashy. Il a disparu lorsque j'ai mis à niveau ou rétrogradé cordova iOS.
Le serveur auquel je me connectais utilisait SSL TLSv1.2, donc je savais que ce n'était pas le problème.
la source
Dans votre
.plist
fichier de projet , ajoutez cette autorisation:la source
La syntaxe de la configuration Info.plist
la source
Réponse mise à jour (après la WWDC 2016):
App Transport Security, ou ATS, est une fonctionnalité introduite par Apple dans iOS 9. Lorsque ATS est activé, il oblige une application à se connecter aux services Web via une connexion HTTPS plutôt que HTTP non sécurisé.
Cependant, les développeurs peuvent toujours désactiver ATS et autoriser leurs applications à envoyer des données via une connexion HTTP, comme mentionné dans les réponses ci-dessus. Fin 2016, Apple rendra l' ATS obligatoire pour tous les développeurs qui souhaitent soumettre leurs applications sur l'App Store. lien
la source
L'appareil sur lequel j'ai testé avait un mauvais réglage de l'heure. Ainsi, lorsque j'essayais d'accéder à une page avec un certificat qui s'épuiserait bientôt, cela refuserait l'accès car le périphérique bien que le certificat ait expiré. Pour corriger, réglez l'heure appropriée sur l'appareil!
la source