Ошибка CFNetwork SSLHandshake (-9824) против сервера, поддерживающего TLSv1.2

У меня есть очень простой веб-сервер tomcat, который я настроил для работы с TLSv1.2, что подтверждается с помощью curl

$ curl --verbose https://{my-servers-dns}:8443/
*   Trying {my-servers-ip-address} ...
* Connected to dev.a-b.fit ({my-servers-ip-address}) port 8443 (#0)
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
* Server certificate: {my-servers-dns}
* Server certificate: Go Daddy Secure Certificate Authority - G2
* Server certificate: Go Daddy Root Certificate Authority - G2
> GET / HTTP/1.1
...

Однако, если я запускаю этот очень простой быстрый код, чтобы сделать тот же запрос GET

let url = NSURL(string: "https://{my-servers-dns}:8443/")!
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: {(data, response, error) -> Void in
    if let response = response {
        print("Response: \(response)")
    }
    else {
        print("Response: nil")
    }
})

Когда я делаю это, я получаю следующие 2 ошибки

CFNetwork SSLHandshake failed (-9824)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

Поиск этих ошибок в Google предполагает, что проблема в том, что мое приложение не может подключиться к TLSv1.2. Однако я бы подумал, что запрос curl показывает, что TLS 1.2 поддерживается.


person James Robinson    schedule 11.06.2016    source источник
comment
Тем не менее, весьма вероятно, что проблема связана с моим сервером, поскольку использование https://www.google.com работает нормально.   -  person James Robinson    schedule 11.06.2016


Ответы (1)


* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA256

Здесь используется набор шифров DHE. Это может означать, что ваш сервер не поддерживает наборы шифров ECDHE, поскольку обычно они предпочтительнее, чем DHE.

Из примечаний к выпуску iOS 9:

Наборы шифров DHE_RSA теперь отключены по умолчанию в Secure Transport для клиентов TLS. Это может привести к невозможности подключения к серверам TLS, которые поддерживают только наборы шифров DHE_RSA. ...

Это означает, что если ваш сервер поддерживает только шифры DHE, то соединение не будет установлено по умолчанию для клиента iOS 9. Здесь скорее всего так.

person Steffen Ullrich    schedule 11.06.2016
comment
Чтобы добавить необходимый ECDHE в tomcat, здесь есть очень простые инструкции stackoverflow.com/questions/31971499/ - person James Robinson; 11.06.2016