2017-05-27 23 views
0

函數SecCertificateAddToKeychain()給我提供了一個用於測試的證書的錯誤。SecCertificateAddToKeychain - 導入中的未知格式

證書 - TestCert.p12:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 
openssl pkcs12 -export -inkey key.pem -in cert.pem -out TestCert.p12 

代碼:

NSData *certData = [NSData dataWithContentsOfFile:path]; 
if (certData) { 
    SecCertificateRef newCert = SecCertificateCreateWithData (NULL, (CFDataRef)certData); 
    if (newCert) { 
     OSStatus addResult = SecCertificateAddToKeychain (newCert, NULL); 
     if (addResult) { 
     NSString *errStr = SecCopyErrorMessageString (addResult, NULL); 
     NSLog (@"Cannot add certificate to keychain: %@", errStr); 
     } 
    } 
} 

輸出:不能添加證書到鑰匙串:進口未知格式。 有什麼想法?

+0

您可以手動添加.p12證書(來自Finder)嗎?此外,你應該明確地比較'noErr',不這樣做是不好的形式。 –

+0

我可以 - 從鑰匙串訪問應用程序。它要求通過,並將其放入鑰匙鏈中,並帶有紅色x和「不可信」的備註。當談到noErr時,這是儘可能少的行中的簡化代碼。 – IgorD

+1

如何導入DER格式而不是PKCS#12?你可以用'openssl x509 -outform der -in certificate.pem -out certificate.der'來試試這個嗎? –

回答

2

SecCertificateCreateWithData僅針對X.509格式描述,而不描述PKCS#12。

對於P12你想SecPkcs12Import(這將導入到系統默認的默認鑰匙串)或SecItemImport(不會導入私鑰,除非你明確地給它的鑰匙串到其中的導入 - 例如SecKeychainCopyDefault)。

+0

謝謝。 SecPKCS12Import()允許我在選項中指定密碼,這可能是SecCertificateAddToKeychain()無法添加此證書的原因。 Stefan Arentz告訴我如何創建一個.der證書,並且我使用KeychainAccess實用程序以及SecCertificateAddToKeychain()將它添加到Keychain中,無需密碼。在代碼和實用程序中添加.p12證書所需的密碼。看起來我需要更多地瞭解證書及其差異 - .cer,.pem,.der,.p12,... – IgorD