Si su backend usa una conexión segura y se obtiene usando NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
debe verificar la configuración de su servidor, especialmente para obtener la versión ATS y la información del certificado SSL:
En lugar de simplemente Permitir una conexión insegura mediante la configuración NSExceptionAllowsInsecureHTTPLoads = YES
, en su lugar, debe Permitir seguridad reducida en caso de que su servidor no cumpla con el requisito mínimo (v1.2) para ATS (o mejor para arreglar el lado del servidor).
Permitir seguridad reducida a un único servidor
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
use el cliente openssl para investigar el certificado y obtenga la configuración de su servidor usando el cliente openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
..encuentra al final
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) requiere la versión 1.2 del protocolo Transport Layer Security (TLS).
Requisitos para conectarse usando ATS:
Los requisitos para una conexión de servicio web para usar App Transport Security (ATS) implican el servidor, los cifrados de conexión y los certificados, de la siguiente manera:
Los certificados deben estar firmados con uno de los siguientes tipos de claves:
Clave segura del algoritmo hash 2 (SHA-2) con una longitud de resumen de al menos 256 (es decir, SHA-256 o superior)
Clave de criptografía de curva elíptica (ECC) con un tamaño de al menos 256 bits
Clave Rivest-Shamir-Adleman (RSA) con una longitud de al menos 2048 bits Un certificado no válido da como resultado una falla dura y no hay conexión.
Los siguientes cifrados de conexión admiten el secreto directo (FS) y funcionan con 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
Actualización: resulta que openssl solo proporciona la versión mínima del protocolo Protocolo: enlaces TLSv1