2014-07-25 9 views
6

प्रमाणित फ़ाइल के बावजूद POST अनुरोधों की अनुमति देता है हम DigiCert का उपयोग हमारे सीए के रूप में कर रहे हैं। हम निम्न आदेश के साथ .cer फ़ाइल बना दिया है:एएसनेटवर्किंग 2.0 के साथ एसएसएल पिनिंग

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

जो काम करना चाहिए लेकिन मुद्दा यह है कि न केवल कि प्रमाणपत्र काम, लेकिन किसी भी फ़ाइल हम कोड में डाल काम करेंगे होगा। हमने रिक्त .cer फ़ाइलों का भी परीक्षण किया है और यह भी काम करता है। काम से मेरा मतलब है कि हम सर्वर पर पोस्ट अनुरोध करने में सक्षम हैं, भले ही .cer फ़ाइल का उपयोग न किया जाए। स्पष्ट रूप से हम इसे विफल करना चाहते हैं अगर हमारे हस्ताक्षरित प्रमाण के अलावा कुछ और उपयोग किया जाता है।

हमारा मूल क्लाउडफ्लारे पर सेट है जो उसके बाद एक अमेज़ॅन लोड बैलेंसर को रूट करता है जिस पर हमारे प्रमाणपत्र स्थापित होते हैं।

मैं चार्ल्स प्रॉक्सी का उपयोग एमआईटीएम में कर रहा हूं और मैं इसे आईओएस ऐप में प्रमाण के साथ या बिना कर सकता हूं।

हम एसएसएल पिनिंग करने के लिए AFNetworking की नवीनतम रिलीज का उपयोग कर रहे हैं। मैं AFHTTPRequestOperationManager subclassed और निम्न विधि कहा:

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

क्या महत्वपूर्ण कदम हम चूक गए:

+ (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; 
} 

मेरे कोड पद इस प्रकार है बनाने के लिए?

[manager.securityPolicy.pinnedCertificates count] 

और एक 1.

+0

क्या आपका लक्ष्य (POST को किसी भी प्रमाण का उपयोग नहीं करता) प्रभावी ढंग से पिनिंग तोड़ता है? ऐसा लगता है कि आप केवल कनेक्शन पर एक सच्चे प्रमाणपत्र या सार्वजनिक कुंजी का उपयोग करना चाहते हैं। यहां 'AFNetworking' और पिनिंग पर पिछले प्रश्नों में से एक है: [एक विश्वसनीय प्रमाणपत्र के लिए AFNetworking पिन सार्वजनिक कुंजी] (https://stackoverflow.com/questions/24615144/afnetworking-pin-public-key-for-a-trusted- प्रमाण पत्र)। – jww

+0

क्षमा करें मुझे लगता है कि मुझे अपने प्रश्न को फिर से भरना होगा। लक्ष्य केवल हमारे हस्ताक्षरित प्रमाण का उपयोग करना है। क्या हो रहा है इससे कोई फ़र्क नहीं पड़ता कि हम किस प्रमाणपत्र फ़ाइल का उपयोग करते हैं, यह एक पोस्ट की अनुमति देता है। इसलिए ऐप में प्रमाणित करने के लिए सर्वर के प्रमाण से मेल खाने की प्रक्रिया नहीं हो रही है। – roninSTI

+0

मैं क्लाउडफ्लेयर के लिए '* .cer.pem' फ़ाइलों को कहां डाउनलोड करूं? – fatuhoku

उत्तर

0

यह मेरे लिए भी मामला हो सकता है, AFNetworking 2.3.1 का उपयोग कर रहा है प्राप्त किया:

मैं भी है कि मैं NSLog'd उल्लेख करना चाहिए। AFNetworking 2.1.0 में यह समस्या नहीं है, हालांकि पिनिंग आईओएस 8 बीटा पर टूट जाती है।

संबंधित मुद्दे