Si votre backend utilise une connexion sécurisée et vous obtenez en utilisant NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
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
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
utilisez le client openssl pour étudier le certificat et obtenir la configuration de votre serveur à l'aide du client openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
..trouver à la fin
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: //
Session-ID-ctx:
Master-Key: //
Key-Arg : None
Start Time: 1449693038
Timeout : 300 (sec)
Verify return code: 0 (ok)
App Transport Security (ATS) requiert le protocole Transport Layer Security (TLS) version 1.2.
Conditions requises pour la connexion à l'aide d'ATS:
La configuration requise pour qu'une connexion de service Web utilise App Transport Security (ATS) implique le serveur, les chiffrements de connexion et les certificats, comme suit:
Les certificats doivent être signés avec l'un des types de clés suivants:
Clé Secure Hash Algorithm 2 (SHA-2) avec une longueur de résumé d'au moins 256 (c'est-à-dire SHA-256 ou plus)
Clé de cryptographie à courbe elliptique (ECC) avec une taille d'au moins 256 bits
Clé Rivest-Shamir-Adleman (RSA) d'une longueur d'au moins 2048 bits Un certificat non valide entraîne une défaillance matérielle et aucune connexion.
Les chiffrements de connexion suivants prennent en charge le secret avancé (FS) et fonctionnent avec ATS:
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
Mise à jour: il s'avère que openssl ne fournit que la version minimale du protocole Protocole: liens TLSv1