2017-04-17 96 views
0

我爲我的iPhone應用程序(Objective-C)使用AFHTTPRequestOperation。我需要啓用SSL固定我的應用程序。AFHTTPRequestOperation with SSL Pinning not working

但是,無論我的應用包中包含的證書是正確還是錯誤,調用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固定。測試前請確保您的證書有效。看下面的代碼片段。

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];