Alamofire 4.0.1 SSL请求失败(无法与服务器建立安全连接)

时间:2016-10-07 17:01:33

标签: ssl ios9 ios-simulator alamofire xcode8

我是 Alamofire 的新手,但这应该非常简单,我不知道为什么我遇到了问题。

我正在使用 XCode8 Swift3 Alamofire 4.0.1 ,以及为 iOS9 构建。

我正在访问的网址使用从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文档似乎表明上面的代码是必要的。

1 个答案:

答案 0 :(得分:2)

总结一下这些评论,@ OP的网站不符合Apple的iOS ATS要求。当使用SSL Labs进行测试时,该网站得分为F并表示缺乏对TLS的支持。尽管绕过ATS可能是一种选择,但使用IIS加密工具改进了服务器的TLS配置,如https://scotthelme.co.uk/getting-an-a-on-the-qualys-ssl-test-windows-edition/所述

注意:不要设置严格的传输安全性而不知道它的作用。

这解决了这个问题。