Se il tuo back-end utilizza una formica di connessione sicura otterrai NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
è necessario verificare la configurazione del server in particolare per ottenere la versione ATS e il certificato SSL Informazioni:
Invece di consentire solo l' insicurezza della connessione impostando NSExceptionAllowsInsecureHTTPLoads = YES
, è invece necessario consentire la sicurezza ridotta nel caso in cui il server non soddisfi i requisiti minimi (v1.2) per ATS (o meglio per risolvere il lato server).
Consentire la sicurezza ridotta a un singolo server
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
usa il client openssl per esaminare il certificato e ottenere la configurazione del tuo server usando il client openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
..trova alla fine
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)
La sicurezza del trasporto app (ATS) richiede il protocollo TLS (Transport Layer Security) versione 1.2.
Requisiti per la connessione tramite ATS:
I requisiti per una connessione al servizio Web per l'utilizzo di App Transport Security (ATS) coinvolgono il server, i codici di connessione e i certificati, come segue:
I certificati devono essere firmati con uno dei seguenti tipi di chiavi:
Tasto Secure Hash Algorithm 2 (SHA-2) con una lunghezza digest di almeno 256 (ovvero SHA-256 o superiore)
Chiave di crittografia a curva ellittica (ECC) con una dimensione di almeno 256 bit
Chiave Rivest-Shamir-Adleman (RSA) con una lunghezza di almeno 2048 bit Un certificato non valido provoca un errore grave e nessuna connessione.
I seguenti codici di connessione supportano il segreto di andata (FS) e funzionano 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
Aggiornamento: si scopre che openssl fornisce solo la versione minima del protocollo Protocollo: collegamenti TLSv1