主机支持TLS 1.2,AFNetworking握手失败

Ben*_*ynn 1 ssl ios afnetworking ios9

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

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);
}];
Run Code Online (Sandbox Code Playgroud)

失败:

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." ...
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ynn 9

Steffen引导我回答,确实我需要适当的密码.查看端口上支持的密码的简单方法是密码扫描工具.可以在此处找到支持App Transport Security的密码.一旦我能够在完全配置的网站上进行测试,我就不需要任何类型的白名单.对于没有密码的TLS站点,我可以设置NSThirdPartyExceptionRequiresForwardSecrecy为false.

UPDATE

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

nscurl --verbose --ats-diagnostics <host>
Run Code Online (Sandbox Code Playgroud)

这将告诉您需要添加到白名单中的条目才能使连接成功.这对揭开类型的SSL故障是一个很大的帮助CFNetwork SSLHandshake failed (-9801).