我想将某些用于 TLS 验证的 CA 证书添加到我的 iOS 6 应用程序的钥匙串中。证书包含在应用程序包中。我不想添加在几个示例中描述的任何身份(私钥/证书组合)。
该SecPKCS12Import
调用没有返回任何错误,但不幸的是它也没有返回任何证书。
为了让您重现我的步骤,我以 Google 中间证书('Google Internet Authority')为例,并在下载的 PEM 证书上运行以下命令:
.
#convert PEM certificate to PKCS12
openssl pkcs12 -export -in google.pem -nokeys -out google.p12 -passout "pass:google"
#verification
openssl pkcs12 -in google.p12 -passin "pass:google"
MAC verified OK
Bag Attributes: <No Attributes>
subject=/C=US/O=Google Inc/CN=Google Internet Authority
issuer=/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIDFXfhMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
[...]
ARlIjNvrPq86fpVg0NOTawALkSqOUMl3MynBQO+spR7EHcRbADQ/JemfTEh2Ycfl
vZqhEFBfurZkX0eTANq98ZvVfpg=
-----END CERTIFICATE-----
之后,我将该文件捆绑在我的应用程序中,并在其中执行了以下代码:
NSMutableDictionary * options = [[[NSMutableDictionary alloc] init] autorelease];
[options setObject:@"google" forKey:(id)kSecImportExportPassphrase];
CFArrayRef items = NULL;
NSData *certData = [NSData dataWithContentsOfFile:[NSBundle pathForResource:@"google" ofType:@"p12" inDirectory:[[NSBundle mainBundle] bundlePath]]];
OSStatus result = SecPKCS12Import((CFDataRef)certData, (CFDictionaryRef)options, &items);
assert(result == errSecSuccess);
CFIndex count = CFArrayGetCount(items);
NSLog(@"Certificates found: %ld",count);
控制台结果输出为“找到的证书:0”。certData变量填充了正确数量的字节,如果我更改提供的密码,结果将更改为errSecAuthFailed。
你知道问题可能是什么吗?