2009-10-20 15 views
13

से सेक्रकी रीफ कैसे बनाएं Iphone से एन्क्रिप्टेड संदेशों को भेजने और प्राप्त करने के लिए मुझे एक सार्वजनिक कुंजी (सर्वर की सार्वजनिक कुंजी) पीईएम फ़ाइल पढ़ने और एक SecKeyRef (बाद में मैं इसे फिर से बनाने के लिए इसे चाबी पर भी स्टोर कर सकता था)।आईफोन: सार्वजनिक कुंजी फ़ाइल (पीईएम)

यह मेरे वर्तमान कार्यप्रवाह है:

  1. सर्वर पर: उपयोगकर्ता के प्रमाणपत्र और निजी कुंजी के साथ एक P12 फ़ाइल बनाएँ। सर्वर की कीचेन पर उपयोगकर्ता की सार्वजनिक कुंजी स्टोर करें।
  2. आईफोन पर: सर्वर से पी 12 फ़ाइल पुनर्प्राप्त करें, इसे खोलने के लिए पासवर्ड का उपयोग करें और कुंजीपटल पर निजी कुंजी स्टोर करें।
  3. आईफोन पर: सर्वर से सर्वर की सार्वजनिक कुंजी के साथ एक पीईएम फ़ाइल पुनर्प्राप्त करें। एक SecKeyRef बनाएं और इसे कीचेन
  4. पर संग्रहीत करें: सर्वर पर/से एन्क्रिप्टेड संदेशों को भेजने/प्राप्त करने के लिए दोनों कुंजी का उपयोग करें।
  5. खुशी के बाद कभी भी लाइव रहें।

मुझे 3 के साथ समस्याएं आ रही हैं, क्योंकि मैं पीईएम फ़ाइल डेटा से SecKeyRef नहीं बना सकता। मुझे यह कैसे करना है इस पर कोई दस्तावेज नहीं मिल रहा है, क्या किसी को भी एक ही समस्या थी? कोई संकेत? चूंकि मुझे इस पर कोई कोड उदाहरण या दस्तावेज नहीं मिल रहा है, ऐसा लगता है कि मैं कुछ गलत कर रहा हूं ...

धन्यवाद!

+0

क्या आप कृपया मुझे बता सकते हैं कि मैं कुंजी को कैसे स्टोर और पुनर्प्राप्त कर सकता हूं? कीचेन में संग्रहीत कुंजी का संदर्भ कैसे लें? मेरे पास आपके जैसा ही परिदृश्य है। मैं आईफोन में कुंजी जोड़ी उत्पन्न करना चाहता हूं और कीचेन में स्टोर करना चाहता हूं। फिर बाद में इसे पुनः प्राप्त करना चाहते हैं। मुझे पता है कि कैसे उत्पन्न होता है लेकिन keychain से सफलतापूर्वक स्टोर और पुनर्प्राप्त नहीं कर सका। – karim

उत्तर

7

आपको एक डीईआर एन्कोडेड पेम की व्याख्या करने में सक्षम होना चाहिए और SecCertificateCreateWithData() का उपयोग कर प्रमाण प्राप्त करना चाहिए जिससे आप एक कुंजी निकाल सकते हैं;

NSData *myCertData = ....; 

SecCertificateRef cert = SecCertificateCreateWithData (kCFAllocatorDefault, myCertData); 
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL); 

SecTrustRef trust; 
SecTrustCreateWithCertificates(certs, policy, &trust); 
SecTrustResultType trustResult; 
SecTrustEvaluate(trust, &trustResult); 
SecKeyRef pub_key_leaf = SecTrustCopyPublicKey(trust); 
+1

धन्यवाद! क्या आप जानते हैं कि SecItemAdd/SecItemCopyMatching का उपयोग करके कीचेन से इस कुंजी को स्टोर/पुनर्प्राप्त करने के लिए मुझे किन कुंजी/मानों का उपयोग करना चाहिए? – TehJabbit

+3

मैं पॉलिसी ऑब्जेक्ट कैसे बना सकता हूं? कोड स्निपेट नीति के बारे में कुछ भी नहीं बताता है? – futureelite7

+2

हमें यह myCertData कैसे मिला? मान लें कि मेरे पास openssl कमांड से उत्पन्न एक pub.pem फ़ाइल है, तो क्या मैं इस कोड का उपयोग करूंगा: NSData * myCertData = [[NSData alloc] initWithContentsOfFile: @ "public.pem"]; ? – Devarshi

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