2013-02-08 16 views
7

मैं आईफोन या आईपैड पर स्थापित प्रमाणपत्रों की सूची प्राप्त करना चाहता हूं। इसलिए मैं इसे चुनने और सर्वर पर एसएसएल सत्यापन के लिए उपयोग करने के लिए इसका उपयोग कर सकता हूं। हालांकि मैं इस सूची को पाने में सक्षम नहीं हूं। मैंने इस निम्न लिंक में देखा है कि आईओएस में प्रमाण पत्र प्राप्त करना संभव नहीं है क्योंकि कोई केवल अपने स्वयं के कीचेन तक पहुंच सकता है। iOS get Configuration Profiles that are installedआईओएस डिवाइस से प्रमाणपत्र सूची प्राप्त करें

हालांकि मुझे शक है :)।

नीचे दिए गए लिंक से Get Certificates in Keychain मैं प्रमाणपत्र प्राप्त करने के लिए कोड का उपयोग कर रहा हूं। हालांकि मुझे शून्य डेटा मिल रहा है।

NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys: 
          (__bridge id)(kSecClassCertificate), kSecClass, 
          [NSNull null], kSecMatchSearchList, 
          kCFBooleanTrue, kSecReturnRef, 
          kSecMatchLimitAll, kSecMatchLimit, 
          nil]; 
    CFDataRef *items = nil; 
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, ((CFTypeRef *)&items)); 

मैं [NSNull अशक्त] इस धारणा है कि अगर कीचेन रेफरी शून्य है तो डिवाइस डिफ़ॉल्ट कीचेन लेता है के साथ खोज सूची के लिए दे रही है हूँ।

मेरे प्रश्न 1) क्या आईफोन से स्थापित प्रमाणपत्रों की सूची प्राप्त करना संभव है। 2) यदि ऐसा है तो कैसे? उपरोक्त कोड में क्या गलत है?

+0

ऐसा लगता है कि आप क्लाइंट एसएसएल प्रमाणीकरण को लागू करने की कोशिश कर रहे हैं, जहां निजी कुंजी क्लाइंट में है, और यही वह प्रमाण पत्र है जिसे आप क्लाइंट पर ढूंढ रहे हैं। क्या वो सही है? – quellish

+0

नहीं। मेरे पास क्लाइंट में कोई निजी कुंजी नहीं है। क्लाइंट के पास उनके डिवाइस पर प्रमाणपत्र स्थापित होंगे। मेरा आवेदन उन प्रमाणपत्रों के बारे में कुछ भी नहीं जानता है। आइडिया उपयोगकर्ता को आईओएस डिवाइस पर स्थापित सभी उपलब्ध प्रमाणपत्रों की सूची पेश करना है। उन्हें चुनने के लिए उन्हें पसंद करें। और फिर ऐप उस प्रमाणपत्र को याद रखेगा और इसे बाद में उपयोग करेगा। लेकिन जैसा कि बताया गया है कि मैं डिवाइस पर स्थापित सभी प्रमाणपत्रों की सूची प्राप्त नहीं कर पा रहा हूं। – sridevi

+0

दाएं। तो आपके पास कॉन्फ़िगरेशन प्रोफ़ाइल के माध्यम से क्लाइंट प्रमाण-पत्र स्थापित हैं। किसी भी तरह से, आप जो करना चाहते हैं उसके लिए आप एक प्रमाणपत्र श्रृंखला के साथ एक पहचान की तलाश में हैं, प्रमाण पत्र नहीं (यानी केएसईसी क्लास इडेंटिटी के लिए खोज)। यह कॉन्फ़िगरेशन प्रोफ़ाइल सेट अप करने के तरीके के आधार पर आपके एप्लिकेशन पर अभी भी उपलब्ध नहीं हो सकता है। – quellish

उत्तर

5

मेरे प्रश्न 1 हैं) क्या आईफोन से स्थापित प्रमाणपत्रों की सूची प्राप्त करना संभव है।

निश्चित रूप से।

2) यदि ऐसा है तो कैसे? उपरोक्त कोड में क्या गलत है?

कोड ठीक है, जहाँ तक मेरा सवाल है (यदि नहीं, समस्या सिर्फ मैं के बारे में सोच सकते हैं स्थापित कर रही है कि NSNull - कोशिश यह छोड़ते हुए)। क्या आप याद कर रहे हैं उचित हकों, अर्थात् के साथ अपने द्विआधारी हस्ताक्षर करने है:

<key>keychain-access-groups</key> 
<array> 
    <string>*</string> 
</array> 

आप एक उदाहरण पा सकते हैं संपत्ति सूची here हकों - वैसे, इस पूरी परियोजना की जाँच, यह दिलचस्प है।

+0

उत्तर के लिए धन्यवाद। मैंने एंटाइटेलमेंट बदलने की कोशिश की। जब मैं 'कीचेन-एक्सेस-ग्रुप' कुंजी के लिए * सेट करता हूं तो मुझे निम्न त्रुटि मिली।'निष्पादन योग्य अमान्य अधिकारों के साथ हस्ताक्षरित किया गया था। आपके एप्लिकेशन के कोड साइनिंग एंटाइटेलमेंट फ़ाइल में निर्दिष्ट एंटाइटेलमेंट आपके प्रावधान प्रोफ़ाइल में निर्दिष्ट उन से मेल नहीं खाते हैं। ' मैंने अपनी प्रावधान प्रोफ़ाइल की जांच की। इसमें वाइल्डकार्ड एपआईड है। अगर मैं 'कीचेन-एक्सेस-ग्रुप' को $ (AppIdentifierPrefix) पर सेट करता हूं * तो मुझे ओएसएसटैटस त्रुटि मिल रही है क्योंकि ऑपरेशन पूरा नहीं हो सका। ' क्या प्रावधान प्रोफ़ाइल में कुछ और बदलना है? – sridevi

+0

[उदाहरण] (https://github.com/ptoomey3/Keychain-Dumper/blob/master/README.md) का उल्लेख है कि यह मानता है कि लक्ष्य डिवाइस पहले ही जेलब्रोकन हो चुका है इसलिए * कीचेन-एक्सेस-ग्रुप 'को असाइन करना * क्या यह सामान्य उपकरणों पर काम करेगा जो जेल टूटा नहीं है? – sridevi

+0

@PearlWhite मुझे लगता है - लेकिन आप इसे क्यों नहीं देखते? –

2

"जेनेरिककेचैन" के लिए ऐप्पल उदाहरण कोड देखें - 'SecItemCopyMatching' दस्तावेज़ से सुलभ। 'कीचेन में सर्टिफिकेट ढूँढना' प्रलेखन में नामांकित प्रमाणपत्र खोजने के लिए विस्तृत कोड शामिल है - जो आपको एक केएसईएएचकएबल लेबल/मूल्य जोड़ी के आधार पर प्राप्त करेगा।

+0

मुझे चाहिए आईओएस डिवाइस पर उपलब्ध सभी प्रमाण पत्र प्राप्त करने के लिए। उपयोगकर्ता कनेक्शन के कनेक्शन के लिए जो भी प्रमाणपत्र चुनना चाहते हैं उसे चुनने के लिए। इसलिए मुझे आगे प्रमाणपत्र का नाम नहीं पता है। – sridevi

+0

सही लेकिन उदाहरण कोड काम करेगा (और थोड़ा है आपके कोड से अलग) और इस प्रकार एक अच्छा प्रारंभिक बिंदु है। प्रमाणपत्रों की पूरी सूची प्राप्त करने के लिए NSDictionary में कुछ अतिरिक्त विकल्प जोड़ें। – GoZoner

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