Якщо ваш бекенд використовує захищений мурашник підключення, ви отримуєте використання NSURLSession
CFNetwork SSLHandshake failed (-9801)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
Вам потрібно перевірити конфігурацію сервера, особливо щоб отримати версію ATS та SSL сертифікат:
Замість того, щоб просто дозволити незахищене підключення , встановивши його NSExceptionAllowsInsecureHTTPLoads = YES
, вам потрібно дозволити знижену безпеку у випадку, якщо ваш сервер не відповідає мінімальній вимозі (v1.2) для ATS (або краще виправити сторону сервера).
Дозволення зниженої безпеки на одному сервері
<key>NSExceptionDomains</key>
<dict>
<key>api.yourDomaine.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
використовувати клієнт openssl для дослідження сертифіката та отримання конфігурації вашого сервера за допомогою клієнта openssl:
openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.)
.. знайдіть у кінці
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)
Безпека транспортного забезпечення додатків (ATS) вимагає протоколу безпеки транспортного рівня (TLS) версії 1.2.
Вимоги до підключення за допомогою ATS:
Вимоги до з'єднання веб-служб для використання App Transport Security (ATS) включають сервер, шифри підключення та сертифікати, як зазначено нижче:
Сертифікати повинні бути підписані одним із таких типів ключів:
Ключ захищеного алгоритму 2 (SHA-2) із довжиною дайвінгу принаймні 256 (тобто SHA-256 або більше)
Ключ криптографії Elliptic-Curve (ECC) розміром не менше 256 біт
Ключ Rivest-Shamir-Adleman (RSA) довжиною не менше 2048 біт. Недійсний сертифікат призводить до жорсткої несправності та відсутності з'єднання.
Наступні шифри з'єднання підтримують передачу секретності (FS) та працюють з 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
Оновлення: виявляється, що openssl надає лише протокол мінімальної версії протоколу: посилання TLSv1