【问题标题】:Host supports TLS 1.2, AFNetworking handshake failing主机支持 TLS 1.2,AFNetworking 握手失败
【发布时间】:2015-10-30 06:02:40
【问题描述】:

我正在尝试发布到支持 TLS 1.2 的服务器 - 至少当我在浏览器中执行 GET 时,我可以验证通信使用 TLS 1.2 并且证书已由证书颁发机构验证。但是,当我尝试使用 AFNetworking iOS 9.0 (13A4305g) / Xcode 7-beta4 将我的代码发布到该服务器时,我遇到了握手失败。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializerWithContentType:@"application/x-www-form-urlencoded"];    
manager.responseSerializer = [AFJSONResponseSerializer serializer];    
[manager POST:requestString parameters:@{ @"apiKey" : MY_API_KEY,
                                          @"payload" : [MyParams paramsForPOSTAsJSON] }
  success:^(AFHTTPRequestOperation *operation, NSDictionary *responseDict) {
      ...
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      myLog(@"Communication failed: %@", error);
}];

失败:

2015-08-06 15:01:08.398 MyApp[1795:394055] CFNetwork SSLHandshake failed (-9824)
2015-08-06 15:01:08.409 MyApp[1795:394055] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)
2015-08-06 15:01:08.412 MyApp[1795:393999] MyClass sendDataToServer Communication failed: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." ...

我错过了什么吗?我怎样才能更深入地挖掘?假设这是服务器而不是代码的问题 - 我怎么能窥探呢?

【问题讨论】:

  • 这可能与 stackoverflow.com/questions/31820284/… 有关,问题在于 iOS9 不仅需要 TLS1.2,还需要特定的密码(前向保密)。
  • @SteffenUllrich 这看起来很有希望。据我所知,我访问的网站没有所有必需的密码。等我解决了这个问题,我会看看会发生什么。

标签: ios ssl afnetworking ios9


【解决方案1】:

Steffen 引导我找到答案,而我确实需要合适的密码。查看端口上支持的密码的一种简单方法是cipherscan tool。应用程序传输安全can be found here 支持的密码。一旦我能够在完全配置的网站上进行测试,我就不需要任何类型的白名单。对于没有密码的 TLS 站点,我可以将 NSThirdPartyExceptionRequiresForwardSecrecy 设置为 false。

更新

如果您使用的是 OS X El Capitan beta 3 或更高版本,您可以使用以下命令:

nscurl --verbose --ats-diagnostics <host>

这将告诉您需要将哪些条目添加到白名单中才能使连接成功。这对于揭开CFNetwork SSLHandshake failed (-9801) 类型的 SSL 故障的神秘面纱非常有帮助。

【讨论】:

  • 另请注意:“证书必须至少使用带有 2048 位或更高 RSA 密钥或 256 位或更高椭圆曲线 (ECC) 密钥的 SHA256 指纹。”
  • iOS 客户端是否可以关闭 ATS 并且仍然能够连接到仅支持 TLS 1.2 的服务器?我的应用程序还没有为 ATS 做好准备,但是后端服务器配置为 TLS 1.2,当客户端连接到服务器进行授权过程时,Web 服务器生成一个票证并将其发送回 iOS 客户端,但是,当我使用同一张票进一步调用后端服务器,该票无法被服务器识别。当我将 iOS 客户端票证与 Windows API Tester 票证(这是有效的)进行比较时,iOS 客户端票证要短得多。对不起,我是新手。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多