2013-10-31 149 views
4

我開發IPhone需要一個證書來調用一些服務的應用程序,所以我加入了證書,我的鑰匙串這樣做:SecItemAdd創建兩個身份

SecCertificateRef cert = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) certificadoData); 
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:(__bridge id)kSecClassCertificate forKey:(__bridge id)kSecClass]; 
[dictionary setObject:(__bridge id)(cert) forKey:(__bridge id<NSCopying>)(kSecValueRef)]; 
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dictionary, NULL); 

當我列出所有的kSecClassIdentity在此代碼之前,結果是none,並且在此代碼之後,返回是兩個身份和一個證書。 當我嘗試使用身份標識時,一個正常工作,另一個沒有。爲什麼SecItemAdd爲一個kSecClassCertificate創建兩個kSecClassIdentity?我怎樣才能找到正確的?

回答

1

我只是不得不解決這個問題,從我的研究中,問題是其中一個身份包含私鑰,另一個包含公鑰。

所以,當你試圖取回你必須

value: kSecAttrKeyClassPrivate/kSecAttrKeyClassPublic 
key: kSecAttrKeyClass 

添加到用作過濾字典中SecItemCopyMatching身份如:

NSMutableDictionary *filterDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
              (__bridge id)kSecClassIdentity, kSecClass, 
              kSecMatchLimitAll,    kSecMatchLimit, 
              kCFBooleanTrue,     kSecReturnRef, 
              kSecAttrKeyClassPrivate,  kSecAttrKeyClass, 
              nil]; 
+0

這必須是一個鑰匙扣錯誤,因爲它對每個證書擁有多個身份是沒有意義的,也沒有與私鑰沒有關聯的身份。你有沒有向蘋果提交錯誤報告? –