获取iOS中mobilecertificate中包含的pfx文件

我正在尝试使用存储在iPhone上的.mobileconfig文件中的.pfx连接到服务器。

当服务器请求时

-(void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge{ 

如何使用.pfx创建NSURLCredential? 我应该用吗?

 + (NSURLCredential *)credentialWithIdentity:(SecIdentityRef)identity certificates:(NSArray *)certArray persistence:(NSURLCredentialPersistence)persistence 

如果是这种情况,我如何提取.pfx将其放入数组中。

提前致谢。

你可以使用我的代码:

  - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { NSString *path = [[NSBundle mainBundle] pathForResource:@"torbix" ofType:@"pfx"]; NSData *pfxdata = [NSData dataWithContentsOfFile:path]; CFDataRef inpfxdata = (CFDataRef)pfxdata; SecIdentityRef myIdentity; SecTrustRef myTrust; OSStatus status = extractIdentityAndTrust(inpfxdata, &myIdentity, &myTrust); SecCertificateRef myCertificate; SecIdentityCopyCertificate(myIdentity, &myCertificate); const void *certs[] = { myCertificate }; CFArrayRef certsArray = CFArrayCreate(NULL, certs, 1, NULL); NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:(NSArray *)myCertificate persistence:NSURLCredentialPersistencePermanent]; [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; CFRelease(myIdentity); CFRelease(myCertificate); CFRelease(certsArray); } //extractIdentityAndTrust method. -(OSStatus) extractIdentityAndTrust:(CFDataRef)inpfxdata identity:(SecIdentityRef *)identity trust:(SecTrustRef *)trust { OSStatus securityError = errSecSuccess; CFStringRef password = CFSTR("password"); const void *keys[] = { kSecImportExportPassphrase }; const void *values[] = { password }; CFDictionaryRef options = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); securityError = SecPKCS12Import(inpfxdata, options, &items); if (securityError == 0) { 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); } return securityError; } 

祝你好运!^ – ^

所以不,没有办法从mobileconfig文件中获取证书。 iOS应用程序使用自己的钥匙串访问和存储。 只有电子邮件和互联网等其他电话服务才能使用这些证书