2014-07-25 14 views
6

Chúng tôi đang sử dụng DigiCert làm CA của chúng tôi. Chúng tôi đã thực hiện các tập tin cer với lệnh sau đây:Ghim SSL với AFNetworking 2.0 cho phép yêu cầu POST bất kể tệp cert được sử dụng

openssl x509 -in WEBSITE.crt -outform der -out WEBSITE.cer 

mà NÊN làm việc nhưng vấn đề là không chỉ sẽ là công việc cer nhưng bất kỳ tập tin chúng tôi đưa vào mã sẽ làm việc. Chúng tôi thậm chí đã thử nghiệm các tệp .cer trống và cũng hoạt động. Bằng cách làm việc tôi có nghĩa là chúng tôi có thể thực hiện một yêu cầu đăng bài cho máy chủ bất kể những gì tập tin .cer được sử dụng. Rõ ràng chúng tôi muốn nó thất bại nếu một cái gì đó khác với cert đã ký của chúng tôi được sử dụng.

Nguồn gốc của chúng tôi được đặt tại Cloudflare, sau đó chuyển đến bộ cân bằng tải Amazon có chứng chỉ của chúng tôi được cài đặt trên đó.

Tôi đang sử dụng Charles Proxy cho MITM và tôi có thể làm điều đó có hoặc không có chứng chỉ trong ứng dụng iOS.

Chúng tôi đang sử dụng bản phát hành mới nhất AFNetworking để thực hiện ghim SSL. Tôi subclassed AFHTTPRequestOperationManager và bổ sung các phương pháp sau đây:

+ (AFSecurityPolicy*) siteSecurityPolicy 
{ 
    /**** SSL Pinning ****/ 
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"WEBSITE" ofType:@"cer"]; 
    NSData *certData = [NSData dataWithContentsOfFile:cerPath]; 
    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; 
    [securityPolicy setAllowInvalidCertificates:NO]; 
    [securityPolicy setPinnedCertificates:@[certData]]; 
    [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate]; 
    /**** SSL Pinning ****/ 

    return securityPolicy; 
} 

Mã của tôi để làm cho bài như sau:

websiteRequestOperationManager *manager = [websiteRequestOperationManager manager]; 

/**** SSL Pinning ****/ 
[manager setSecurityPolicy:[websiteRequestOperationManager siteSecurityPolicy]]; 
/**** SSL Pinning ****/ 

[manager GET:WEBSITE_URL parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) { 
    //code 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    //code 
}]; 

gì bước quan trọng chúng ta đã bỏ lỡ?

Tôi cũng nên đề cập đến mà tôi NSLog'd:

[manager.securityPolicy.pinnedCertificates count] 

và nhận được một 1.

+0

Không phải mục tiêu của bạn (sử dụng bất kỳ chứng chỉ nào để POST) có hiệu quả không? Dường như với tôi bạn sẽ chỉ muốn sử dụng một chứng chỉ thực sự hoặc khóa công khai trên kết nối. Đây là một trong những câu hỏi trong quá khứ về 'AFNetworking' và ghim: [Khóa công khai pin AFNetworking cho chứng chỉ tin cậy] (https://stackoverflow.com/questions/24615144/afnetworking-pin-public-key-for-a-trusted- chứng chỉ). – jww

+0

Xin lỗi tôi nghĩ rằng tôi cần phải thuật lại câu hỏi của mình. Mục tiêu là chỉ sử dụng cert đã ký của chúng tôi. Điều gì đang xảy ra là nó không quan trọng những gì tập tin cert chúng tôi sử dụng, nó cho phép một bài đăng. Vì vậy, quá trình khớp với chứng chỉ của máy chủ để chứng nhận trong ứng dụng không xảy ra. – roninSTI

+0

Tôi tải xuống các tệp '* .cer.pem' cho Cloudflare ở đâu? – fatuhoku

Trả lời

0

Điều này dường như là trường hợp đối với tôi là tốt, sử dụng AFNetworking 2.3.1. AFNetworking 2.1.0 không có vấn đề này, tuy nhiên việc ghim có vỡ trên iOS 8 beta 5.

Các vấn đề liên quan