2013-05-17 5 views
8

का उपयोग कर अपने iPhone अनुप्रयोग में मैं एक सर्वर से समझदार डेटा (उपयोगकर्ता नाम और पासवर्ड) डाउनलोड करने के लिए स्व-हस्ताक्षरित SSL प्रमाण पत्र के साथ एक https कनेक्शन का उपयोग कर रहा हूँ SSL प्रमाणपत्र तुलना करने के लिए।कैसे AFNetworking

यह ऐप केवल निजी उपयोग के लिए है, यह उत्पादन के लिए नहीं है।

मैं AFNetworking उपयोग कर रहा हूँ https कनेक्शन प्रबंधित लेकिन, के बाद से मेरी प्रमाण पत्र है, ताकि उसे काम करने के लिए में एक सीए से हस्ताक्षरित नहीं है मैं AFURLConnectionOperation वर्ग के शीर्षक के लिए निम्न जोड़ने के लिए किया था:

#define _AFNETWORKING_ALLOW_INVALID_SSL_CERTIFICATES_ 1 

लेकिन इसके साथ मेरा ऐप किसी प्रमाण पत्र की अनुमति देगा।

क्या मेरे सर्वर से केवल प्रमाणपत्र को ऐप में बंडल करने और https कनेक्शन में सर्वर द्वारा प्रदान किए गए प्रमाण पत्र की तुलना करने की अनुमति देने का कोई तरीका है? और यदि यह संभव था, तो सुरक्षा के मामले में कोई महत्वपूर्ण लाभ होगा?

मैं सुरक्षा के लिए बहुत नया हूं और मैं उलझन में हूं।

उत्तर

21

आप जिस शब्द को खोज रहे हैं वह एसएसएल पिनिंग है, जहां ऐप सत्यापित करता है कि दूरस्थ सर्वर द्वारा प्रस्तुत एक ज्ञात प्रमाणपत्र या सार्वजनिक कुंजी मेल खाता है।

AFNetworking प्रमाण पत्र या सार्वजनिक कुंजी के साथ पिनिंग दोनों का समर्थन करता है। आपको अपने ऐप के बंडल में प्रमाणपत्र (ओं) या सार्वजनिक कुंजी जोड़नी होगी, और defaultSSLPinningMode एएफएचटीपी क्लाइंट या SSLPinningMode पर AFURLConnectionOperation पर संपत्ति सेट करके सुविधा सक्षम करनी होगी।

आप AFSSLPinningModePublicKey या AFSSLPinningModeCertificate का उपयोग करके पिन कर सकते हैं। AFSSLPinningModeCertificate का अर्थ है कि सर्वर का प्रमाणपत्र बिल्कुल बंडल में से किसी एक से मेल खाना चाहिए।

AFSSLPinningModePublicKey अधिक उदार है और इसका मतलब है कि सर्वर का प्रमाणपत्र बंडल में किसी भी सार्वजनिक कुंजी के लिए मेल खाना चाहिए, या बंडल में प्रमाण पत्र से जुड़ी कोई भी सार्वजनिक कुंजी।

AppDotNet उदाहरण में example of setting the pinning mode है।

+0

मुझे सही दिशा में इंगित करने के लिए धन्यवाद। क्या ऐसा कोई महत्वपूर्ण सुरक्षा फायदे हैं? – BigLex

+1

एसएसएल पिनिंग एमआईटीएम हमलों और समझौता सीए से अतिरिक्त सुरक्षा प्रदान करता है। कुछ अंतर्दृष्टि है [यहां] (http://blog.lumberlabs.com/2012/04/why-app-developers-should-care-about.html)। –

+0

बस जो मैं खोज रहा था! एक आखिरी सवाल, क्या मुझे किसी भी तरह से प्रमाणपत्र फ़ाइल सेट करने की ज़रूरत है जिसके खिलाफ AFNetworking लाइब्रेरी को सर्वर या लाइब्रेरी द्वारा प्रदान किए गए प्रमाणपत्र की तुलना करनी चाहिए, इसे स्वयं ही मिल जाएगा? – BigLex

7

AFSSLPinningModePublicKey बनाम AFSSLPinningModeCertificate के संबंध में डेविड के उत्तर पर थोड़ा विस्तार करने के लिए। आदर्श रूप से, आप सार्वजनिक कुंजी पिन करेंगे, प्रमाण पत्र नहीं। ऐसा इसलिए है क्योंकि Google जैसी कुछ साइटें और सेवाएं हर 30 दिनों में अपने प्रमाणपत्रों को घुमाती हैं। लेकिन वे एक ही सार्वजनिक कुंजी को फिर से प्रमाणित करते हैं।

प्रमाण पत्र अक्सर मोबाइल क्लाइंट के लिए छोटे सीआरएल के आकार को रखने के लिए घुमाए जाते हैं। लेकिन वे कुंजी निरंतरता परीक्षण की अनुमति देने के लिए एक ही सार्वजनिक कुंजी (एक नया निर्माण करने के बजाय) को फिर से प्रमाणित करते हैं।

सार्वजनिक कुंजी पिनिंग यह है कि Certificate Patrol जैसे टूल निशान याद करते हैं। प्रमाण पत्र बदलने की उम्मीद है; सार्वजनिक कुंजी नहीं है।

सार्वजनिक कुंजी पिनिंग एसएसएच के StrictHostKeyChecking की तरह है, यदि आप इससे परिचित हैं।

ओडब्ल्यूएएसपी पर Certificate and Public Key Pinning पर भी एक लिखना है।