2011-12-08 194 views
2

我试图提取一个.p12文件并将其用于对我自己的服务器的双向身份验证。当我试图编译我得到一些链接错误。该错误指的:客户端证书iOS

  • _kSecImportExportPassphrase
  • _SecIdentityCopyCertificate
  • _kSecImportItemTrust
  • _SecPKCS12Import
  • _kSecImportItemIdentity

这里是我使用提取P12文件的代码:

 -(void)clientCert 
     { 
      NSString *path = [[NSBundle mainBundle] pathForResource:@"torbix" ofType:@"p12"]; 
      NSData *p12data = [NSData dataWithContentsOfFile:path]; 
      CFDataRef inP12data = (CFDataRef)p12data; 

      SecIdentityRef myIdentity; 
      SecTrustRef myTrust; 
      OSStatus status = extractIdentityAndTrust(inP12data, &myIdentity, &myTrust); 

      SecCertificateRef myCertificate; 
      SecIdentityCopyCertificate(myIdentity, &myCertificate); 
      const void *certs[] = { myCertificate }; 
      CFArrayRef certsArray = CFArrayCreate(NULL, certs, 1, NULL); 

     } 
     OSStatus extractIdentityAndTrust(CFDataRef inP12data, SecIdentityRef *identity, 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(inP12data, 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; 
    } 

为什么我得到这些错误?

+0

什么错误,你所链接的框架是什么? – Stripes

+0

明天当我回到实验室的时候会再检查一次! :) – Bewn

+0

它现在解决了!解决方案在答案! :) – Bewn

回答

6

Security.framework添加到您的项目中。

在Xcode 4.2+目标中,进入“Build Phases”选项卡,“Link BinariesWith Libraries”,点击“+”并添加“Security.framework”。

enter image description here

+0

谢谢!明天我会回到实验室试试看。 (Y) – Bewn