2016-10-07 8 views
1

Я новичок в Alamofire, но это должно быть очень просто, и я не уверен, почему у меня возникает проблема ,Alamofire 4.0.1 Запросы SSL Неудача (безопасное подключение к серверу невозможно)

Я использую XCode8, Swift3 и Alamofire 4.0.1, и здание для iOS9.

URL-адрес, к которому я обращаюсь, обеспечен новым сертификатом, приобретенным у GoDaddy. Как Chrome, так и Safari могут загружать защищенный сайт на моем MacBookPo, и все выглядит хорошо.

Однако следующий код:

Alamofire.request(buildRequestString().addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!).validate().responseJSON { response in 
    switch response.result { 
     case .success(let data): 
     print(JSON(data)) 
     case .failure(let error): 
     print(error) 
    } 
    } 

приводит к следующей ошибке: (не я должен заменить мой адрес/домен по соображениям безопасности)

[] nw_coretls_read_one_record tls_handshake_process: [-9801] 
[] nw_endpoint_flow_protocol_error [1.1 12.345.67.890:443 in_progress socket-flow (satisfied)] TLS protocol sent error: [-9801] 
[] nw_endpoint_flow_protocol_disconnected [1.1 12.345.67.890:443 in_progress socket-flow (satisfied)] Output protocol disconnected 
[] nw_endpoint_resolver_receive_report [1 sub.domain.ext:443 in_progress resolver (satisfied)] received child report:[1.1 12.345.67.890:443 failed socket-flow (satisfied)] 
[] nw_connection_endpoint_report [1.1 12.345.67.890:443 failed socket-flow (satisfied)] reported event flow:failed_connect, error Error Domain=kNWErrorDomainTLS Code=-9801 "Security Error: -9801" UserInfo={NSDescription=Security Error: -9801} 
[] nw_connection_endpoint_report [1 sub.domain.ext:443 failed resolver (satisfied)] reported event flow:failed_connect 
[] __tcp_connection_start_block_invoke 1 sending event TCP_CONNECTION_EVENT_DISCONNECTED in response to state failed and error Error Domain=kNWErrorDomainTLS Code=-9801 "Security Error: -9801" UserInfo={NSDescription=Security Error: -9801} 
[] tcp_connection_event_notify 1 event: TCP_CONNECTION_EVENT_DISCONNECTED, reason: nw_connection event, should deliver: true 
[] tcp_connection_cancel 1 
[] nw_endpoint_handler_cancel [1 sub.domain.ext:443 failed resolver (satisfied)] 
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801) 
[] nw_endpoint_handler_cancel [1.1 12.345.67.890:443 failed socket-flow (satisfied)] 
[] nw_resolver_cancel_on_queue 0x600000101b00 
[] -[NWConcrete_tcp_connection dealloc] 1 

    Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={_kCFStreamErrorCodeKey=-9801, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSUnderlyingError=0x608000046e70 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9801, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9801}}, NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://sub.domain.ext/api/v1/Assignment?query=%22%22&device=%22%22, NSErrorFailingURLStringKey=https://sub.domain.ext/api/v1/Assignment?query=%22%22&device=%22%22, _kCFStreamErrorDomainKey=3} 

Может кто-нибудь дать мне некоторое представление о том почему эта ошибка происходит? Кажется, что сайту не доверяют, хотя есть действующий сертификат. Есть ли другие настройки в XCode, которые мне нужно настроить, чтобы разрешить это соединение? Документация Alamofire показала, что код, указанный выше, был всем необходимым.

+0

Проверьте свой сайт, используя https://www.ssllabs.com/ssltest/index.html. Проверьте, поддерживает ли он TLS, пересылает секретные шифры и отправляет промежуточные сертификаты. –

+0

Ладно .. так что я получил общий балл «F» с этого сайта. Похоже, этот новый сертификат (я только что получил вчера) не поддерживает TLS 1.2?!?!? Спасибо GoDaddy ... так какие у меня варианты? – Xorcist

+1

Поддержка TLS1.2 не относится к самому сертификату. Скорее, это зависит от того, как вы настроили свой веб-сервер. Развернули ли вы сертификат на своем сайте и включили SSL, или это было сделано GoDaddy? В зависимости от вашего веб-сервера довольно легко включить поддержку TLS и получить свой сайт по стандартам ATS от Apple. –

ответ

1

Чтобы суммировать комментарии, сайт @ OP не соответствовал требованиям Apple iOS ATS. При тестировании с SSL Labs сайт забил F и указал на отсутствие поддержки TLS. В то время как в обход АТС может быть вариант, конфигурация TLS сервера была улучшена с помощью инструмента IIS Crypto, как описано в https://scotthelme.co.uk/getting-an-a-on-the-qualys-ssl-test-windows-edition/

Примечание: НЕ установить Strict Transport Security, не зная, что он делает.

Это решение проблемы.