客户端证书iOS

时间:2011-12-08 09:38:29

标签: iphone objective-c ios linker

我正在尝试提取.p12文件并将其用于针对我自己的服务器的双向身份验证。当我正在尝试编译时,我得到一些链接错误。错误是指:

  • _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;
    }

为什么我会收到这些错误?

1 个答案:

答案 0 :(得分:6)

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

在目标的Xcode 4.2+中,转到“Build Phases”选项卡,“Link BinariesWith Libraries”,单击“+”并添加“Security.framework”。

enter image description here