आप प्रमाणपत्र (रों) आप इस
keytool -exportcert -keystore <keystore> -file some.cer
आप स्टोर प्रकार और दुकान प्रदाता, look here के बारे में Keytool बताने के लिए आवश्यकता हो सकती है जैसे कीस्टोर से जरूरत का निर्यात कर सकता है।
आप इस कोड के साथ आईओएस कीचेन में है कि .cer फ़ाइल पढ़ सकते हैं:
- (void) importCertToKeyChain: (NSData *) data
{
// Delete the old certificate, otherwise SecItemAdd complains.
OSStatus oss = SecItemDelete((__bridge CFDictionaryRef)([self clientCertificateQuery]));
// Import the certificate
SecCertificateRef certRef = NULL;
certRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)(data));
NSDictionary *att = [NSDictionary dictionaryWithObjectsAndKeys: (__bridge id)(kSecClassCertificate), kSecClass, (__bridge id) certRef, kSecValueRef, nil];
oss = SecItemAdd((__bridge CFDictionaryRef)(att), NULL);
}
जब आप प्रमाण पत्र की जरूरत है आप इस तरह कीचेन से प्राप्त कर सकते हैं:
- (SecCertificateRef) getCertFromKeyChain
{
CFTypeRef ref = NULL;
SecItemCopyMatching((__bridge CFDictionaryRef)([self clientCertificateQuery]), &ref);
return (SecCertificateRef) ref;
}
clientCertificateQuery दिखता है इस तरह।
static NSString *clientCertSubject = @"TestSubjectClient";
-(NSMutableDictionary *) clientCertificateQuery
{
NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
[query setObject:(__bridge id) kSecClassCertificate forKey:(__bridge id)kSecClass];
[query setObject:clientCertSubject forKey:(__bridge id<NSCopying>)(kSecMatchSubjectContains)];
[query setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef];
id)kSecAttrKeyType];
return query;
}
वहाँ भी एक PCKS12 दुकान (आप अभी भी उस प्रारूप में अपने बीकेएस दुकान को बदलने के लिए की आवश्यकता होगी) को पढ़ने के लिए एक समारोह है। इसे SecPKCS12Import
कहा जाता है और इसके साथ आपको अपने आईओएस कीचेन में प्रमाणपत्र आयात करने की आवश्यकता नहीं होगी। मुझे इसके साथ कोई भाग्य नहीं था और फिर भी चाबी में प्रमाण की आवश्यकता थी, लेकिन यहां something about this है।
अद्यतन:
camdaochemgio के रूप में जब एक प्रमाण पत्र है कि गुप्त सूचना (निजी कुंजी) की तरह होता है एक अनुप्रयोग में सहित विधि से ऊपर उपयोग करने की अनुशंसा नहीं है टिप्पणी में बताया। क्योंकि .cer फ़ाइल सुरक्षित नहीं है और आसानी से .ipa से निकाला जा सकता है।
पीकेसीएस # पी 12 पासवर्ड सुरक्षा का समर्थन करता है, इसलिए इसका उपयोग करना बेहतर है।
आप इस तरह PKCS # P12 (from here लिया गया) को अपना कुंजी गुप्त कर सकते हैं:
keytool -importkeystore -srckeystore KEYSTORE.jks -destkeystore KEYSTORE.p12 -srcstoretype BKS -deststoretype PKCS12 -srcstorepass mysecret -deststorepass mysecret -srcalias myalias -destalias myalias -srckeypass mykeypass -destkeypass mykeypass -noprompt
तो फिर तुम .p12 फ़ाइल इस तरह (क्रेडिट here जाना) लोड कर सकते हैं
// Load Certificate
NSString *path = [[NSBundle mainBundle] pathForResource:@"cert" ofType:@"p12"];
NSData *p12data = [NSData dataWithContentsOfFile:path];
CFDataRef inP12data = (__bridge CFDataRef)p12data;
// Only password based PKCS#12 blobs are supported
CFStringRef password = CFSTR("Password");
const void *keys[] = { kSecImportExportPassphrase };
const void *values[] = { password };
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);
// The import
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
OSStatus securityError = SecPKCS12Import(inP12data, options, &items);
if (securityError == 0)
{
// Exploring the content
CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex(items, 0);
const void *tempIdentity = NULL;
tempIdentity = CFDictionaryGetValue(myIdentityAndTrust, kSecImportItemIdentity);
*identity = (SecIdentityRef)tempIdentity;
const void *tempTrust = NULL;
tempTrust = CFDictionaryGetValue(myIdentityAndTrust, kSecImportItemTrust);
*trust = (SecTrustRef)tempTrust;
}
if (options) {
CFRelease(options);
}
अंतिम लेकिन कम से कम इस विषय के बारे में कुछ लिंक नहीं:
इस तरह क्योंकि प्रमाणपत्र फ़ाइल मुख्य बंडल में संग्रहीत किया जाता है, सुरक्षित नहीं है। कोई भी बंडल निकालने के बाद फ़ाइल के बिना फ़ाइल प्राप्त कर सकता है। एंड्रॉइड के रूप में कीस्टोर बेहतर है, लेकिन मुझे आईओएस में कीस्टोरों को नहीं पता है। कोई उपाय? –
@camdaochemgio ठीक है, मैंने पीसीकेएस 12 स्टोर्स के साथ काम करने के तरीके को पोस्ट किया है। – sofacoder