【问题标题】:CFNetwork SSLHandshake failed (-9824) against server that support TLSv1.2CFNetwork SSLHandshake 针对支持 TLSv1.2 的服务器失败 (-9824)
【发布时间】:2016-10-12 11:43:34
【问题描述】:

我有一个非常简单的 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)

谷歌搜索这些错误表明问题在于我的应用无法连接到 TLSv1.2。但是,我会认为 curl 请求表明支持 TLS 1.2。

【问题讨论】:

  • 也就是说问题很可能出在我的服务器端,因为使用 https://www.google.com 工作正常

标签: ios swift ssl tls1.2


【解决方案1】:
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA256

这是 curl 在这里使用的 DHE 密码套件。这可能意味着您的服务器不支持 ECDHE 密码套件,因为与 DHE 相比,这些密码套件通常是首选。

来自iOS 9 Release Notes

现在默认情况下在 TLS 客户端的安全传输中禁用 DHE_RSA 密码套件。这可能会导致无法连接到仅支持 DHE_RSA 密码套件的 TLS 服务器。 ...

这意味着如果您的服务器仅支持 DHE 密码,那么在 iOS 9 客户端的默认设置中连接将失败。这里很可能就是这种情况。

【讨论】:

猜你喜欢
  • 2016-01-31
  • 1970-01-01
  • 2013-10-10
  • 2016-02-11
  • 2015-08-23
  • 2015-09-21
  • 1970-01-01
相关资源
最近更新 更多