У нас было трудное время, чтобы обеспечить сетевые подключения приложений с помощью SSL с помощью AFNetworking 2.5.0.
Мы используем самозаверяющий центр сертификации и внедряем настраиваемую политику безопасности с помощью закрепленных сертификатов.
Мы проверили немало конфигураций, предоставленных AFNetworking, но пока не повезло. Получаем сообщение об ошибке:
2015-01-05 19: 03: 07.191 AppName [9301: 319051] Ошибка при обновлении пользователя поездка. Ошибка: Ошибка домена = NSURLErrorDomain Code = -1012 "операция не может быть завершена. (Ошибка NSURLErrorDomain -1012.)" UserInfo = 0x7ae056b0 {NSErrorFailingURLKey = https://api.XXX.com/XXX/XXX/, NSErrorFailingURLStringKey = https://api.XXX.com/XXX/XXX/}
Наш сертификат отлично работает на других клиентах, таких как cURL и Android. При использовании HTTP наша реализация также отлично работает.
Кто-нибудь знает о каких-либо проблемах, связанных с закрепленными сертификатами и AFNetworking? Если да, вы оцените любые указатели, которые у вас могут быть.
Здесь часть реализации:
+ (AFSecurityPolicy*)customSecurityPolicy {
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"der"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
[securityPolicy setAllowInvalidCertificates:NO];
[securityPolicy setValidatesCertificateChain:NO];
[securityPolicy setPinnedCertificates:@[certData]];
return securityPolicy;
}
+ (AFHTTPRequestOperationManager*)customHttpRequestOperationManager {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy = [self customSecurityPolicy]; // SSL
return manager;
}
+(void)getRequestWithUrl:(NSString*)url success:(void(^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void(^) (AFHTTPRequestOperation *operation, NSError *error))failure {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
AFHTTPRequestOperationManager *manager = [HttpClient customHttpRequestOperationManager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
success(operation, responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
failure(operation, error);
}];
}
Спасибо!