2017-04-17 3 views
0

내 iPhone 앱 (Objective-C)에 AFHTTPRequestOperation을 사용하고 있습니다. 내 앱에 SSL 고정 기능을 설정해야합니다.SSL로 AFHTTPRequestOperation 작동하지 않음

그러나 내 앱 번들에 포함 된 인증서가 옳았거나 잘못 되었더라도 API 호출은 항상 성공적이었습니다.

내 앱에 고정 된 인증서가 잘못된 인증서 인 경우 내 서버 API 호출이 실패해야합니까?

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request 
                success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure{ 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

    operation.responseSerializer = self.responseSerializer; 
    operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage; 
    operation.credential = self.credential; 
    //operation.securityPolicy = self.securityPolicy; 

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]; 
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"wrong_cert" ofType:@"cer"]; 
    NSData *certData = [NSData dataWithContentsOfFile:cerPath]; 
    [securityPolicy setAllowInvalidCertificates:NO]; 
    [securityPolicy setValidatesDomainName:YES]; 
    [securityPolicy setPinnedCertificates:@[certData]]; 
    [operation setSecurityPolicy:securityPolicy]; 

    [operation setCompletionBlockWithSuccess:success failure:failure]; 
    operation.completionQueue = self.completionQueue; 
    operation.completionGroup = self.completionGroup; 

    return operation; 

} 

가 알려 주시기 바랍니다 :

내가 응용 프로그램에있는 코드입니다. 고맙습니다.

답변

0

나는 AFNetworking으로 SSL Pinning을 성공적으로 구현했습니다. 테스트를하기 전에 인증서가 유효한지 확인하십시오. 코드 스 니펫 아래를보십시오.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager sharedManager]; 
    manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 
    AFHTTPRequestOperation *post = [manager POST:[NSString stringWithFormat:@"%@",url] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"JSON: %@", responseObject); 

     [delegate requestCompleted:responseObject]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

     if([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -1012){ 
      //SSL Pinning request failed 

     } else if (!operation.cancelled) { 

     } 
    }]; 

    [post start]; 
관련 문제