SecCertificateAddToKeychain - 导入中的格式未知

Igo*_*orD 3 macos cocoa objective-c keychain x509

函数 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
Run Code Online (Sandbox Code Playgroud)

代码:

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);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

输出:无法将证书添加到钥匙串:导入时格式未知。任何想法?

bar*_*njs 5

SecCertificateCreateWithData仅针对 X.509 格式进行描述,而不针对 PKCS#12 进行描述。

对于 P12,您需要SecPkcs12Import(默认情况下将导入到默认钥匙串)或SecItemImport(它不会导入私钥,除非您明确为其提供要导入私钥的钥匙串 - 例如SecKeychainCopyDefault)。