Jeśli Twój backend korzysta z bezpiecznego połączenia, otrzymasz NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
musisz sprawdzić konfigurację serwera, aby uzyskać wersję ATS i certyfikat SSL. Informacje:
Zamiast po prostu zezwalać na niezabezpieczone połączenie przez ustawienie NSExceptionAllowsInsecureHTTPLoads = YES
, zamiast tego musisz zezwolić na obniżone bezpieczeństwo na wypadek, gdyby Twój serwer nie spełniał minimalnego wymagania (v1.2) dla ATS (lub lepiej naprawić stronę serwera).
Zezwolenie na obniżone bezpieczeństwo na jednym serwerze
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
użyj klienta openssl do sprawdzenia certyfikatu i uzyskania konfiguracji serwera za pomocą klienta openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
.. znajdź na końcu
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)
Aplikacja Transport Transport Security (ATS) wymaga protokołu Transport Layer Security (TLS) w wersji 1.2.
Wymagania dotyczące łączenia za pomocą ATS:
Wymagania dotyczące połączenia usługi internetowej do korzystania z aplikacji App Transport Security (ATS) dotyczą serwera, szyfrów połączeń i certyfikatów, jak następuje:
Certyfikaty muszą być podpisane jednym z następujących rodzajów kluczy:
Bezpieczny klucz algorytmu skrótu 2 (SHA-2) o długości skrótu co najmniej 256 (to znaczy SHA-256 lub większej)
Klucz do kryptografii krzywej eliptycznej (ECC) o rozmiarze co najmniej 256 bitów
Klucz Rivest-Shamir-Adleman (RSA) o długości co najmniej 2048 bitów Niepoprawny certyfikat powoduje ciężką awarię i brak połączenia.
Następujące szyfry połączeń obsługują tajemnicę przekazywania (FS) i współpracują z 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
Aktualizacja: okazuje się, że openssl zapewnia tylko minimalną wersję protokołu Łącza Protokół: TLSv1