针对支持 TLSv1.2 的服务器,CFNetwork SSLHandshake 失败 (-9824)
CFNetwork SSLHandshake failed (-9824) against server that support 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
...
但是,如果我运行这个非常简单的swift代码来发出相同的 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。
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
这是 curl 在这里使用的 DHE 密码套件。这可能意味着您的服务器不支持 ECDHE 密码套件,因为与 DHE 相比,这些密码套件通常更受欢迎。
DHE_RSA cipher suites are now disabled by defaults in Secure Transport for TLS clients. This may cause failure to connect to TLS servers that only support DHE_RSA cipher suites. ...
这意味着如果您的服务器仅支持 DHE 密码,那么在 iOS 9 客户端的默认设置中连接将失败。这里很可能就是这种情况。
我有一个非常简单的 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
...
但是,如果我运行这个非常简单的swift代码来发出相同的 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。
* TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
这是 curl 在这里使用的 DHE 密码套件。这可能意味着您的服务器不支持 ECDHE 密码套件,因为与 DHE 相比,这些密码套件通常更受欢迎。
DHE_RSA cipher suites are now disabled by defaults in Secure Transport for TLS clients. This may cause failure to connect to TLS servers that only support DHE_RSA cipher suites. ...
这意味着如果您的服务器仅支持 DHE 密码,那么在 iOS 9 客户端的默认设置中连接将失败。这里很可能就是这种情况。