Se o seu back-end usa uma conexão segura e você obtém o NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
você precisa verificar a configuração do servidor, especialmente para obter a versão ATS e o certificado SSL.
Em vez de apenas Permitir conexão insegura por meio da configuração NSExceptionAllowsInsecureHTTPLoads = YES
, é necessário Permitir segurança reduzida , caso o servidor não atenda ao requisito mínimo (v1.2) do ATS (ou melhor, para corrigir o lado do servidor).
Permitindo segurança reduzida para um ú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 o cliente openssl para investigar o certificado e obtenha a configuração do servidor usando o cliente openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
..Encontre no 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)
O App Transport Security (ATS) requer o protocolo TLS (Transport Layer Security) versão 1.2.
Requisitos para conectar usando o ATS:
Os requisitos para uma conexão de serviço da Web usar o App Transport Security (ATS) envolvem o servidor, as cifras de conexão e os certificados, da seguinte maneira:
Os certificados devem ser assinados com um dos seguintes tipos de chaves:
Chave Secure Hash Algorithm 2 (SHA-2) com um comprimento de resumo de pelo menos 256 (ou seja, SHA-256 ou superior)
Chave de criptografia de curva elíptica (ECC) com um tamanho de pelo menos 256 bits
Chave Rivest-Shamir-Adleman (RSA) com um comprimento de pelo menos 2048 bits Um certificado inválido resulta em falha grave e sem conexão.
As seguintes cifras de conexão suportam o sigilo direto (FS) e funcionam com o 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
Atualização: verifica-se que o openssl fornece apenas a versão mínima do protocolo Protocolo: links TLSv1