使用CFDataRef将证书保存到钥匙串

时间:2014-09-22 10:25:47

标签: ios objective-c encryption certificate keychain

我正在尝试为CFDataRef身份获取SecIdentityRef持久性引用。但是,当使用apple提供的标准代码时,函数会返回CFDataRef的0x0。输入参数不是零,但不知何故它不再起作用。代码用于完美地工作。

CFTypeRef persistent_ref;

CFDataRef persistentRefForIdentity(SecIdentityRef identity)
{
   const void *keys[] = { kSecReturnPersistentRef, kSecValueRef };
   const void *values[] = { kCFBooleanTrue, identity };

   CFDictionaryRef dict = CFDictionaryCreate(NULL, keys, values, 2, NULL, NULL);

   OSStatus status = SecItemAdd(dict, &persistent_ref); // `SecItemAdd` returns 0

   if (dict)
       CFRelease(dict);

   return (CFDataRef)persistent_ref;
}

status为0,但persistent_ref仍然没有价值。

有谁知道出了什么问题?

1 个答案:

答案 0 :(得分:1)

使CFTypeRef persistent_ref成为局部变量。或者在调用SecItemAdd函数之前确保将其设置为NULL。请参阅下面的代码。

^(1?\d{0,2})$