2017-05-27 2 views
0

Die Funktion SecCertificateAddToKeychain() gibt mir einen Fehler mit dem Zertifikat, das ich zum Testen erstellt habe.SecCertificateAddToKeychain - Unbekanntes Format im Import

Das Zertifikat - 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 

Der Code:

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); 
     } 
    } 
} 

Ausgang: Kann nicht Zertifikat in den Schlüsselbund: Unbekanntes Format im Import. Irgendeine Idee?

+0

Können Sie das .p12-Zertifikat manuell (aus dem Finder) hinzufügen? Außerdem sollten Sie explizit mit 'noErr' vergleichen, da dies keine schlechte Form ist. –

+0

Ich kann - von Keychain Access App. Es fragt nach dem Pass und steckt ihn in den Schlüsselbund mit einem roten X und einer "nicht vertrauenswürdig" -Aktion. Wenn es um noErr geht, ist dies ein vereinfachter Code in so wenig Zeilen wie möglich. – IgorD

+1

Wie importieren Sie als DER-Format anstelle von PKCS # 12? Können Sie das mit 'openssl x509 -outform der -in certificate.pem -out certificate.der' versuchen? –

Antwort

2

SecCertificateCreateWithData wird nur für X.509-Format beschrieben, nicht PKCS # 12.

Für P12 wollen Sie SecPkcs12Import (standardmäßig auf den Standard-Schlüsselbund importieren) oder SecItemImport (die privaten Schlüssel nicht importiert werden, wenn Sie ihm ausdrücklich den Schlüsselbund geben, in denen sie importieren - zum Beispiel SecKeychainCopyDefault).

+0

Danke. SecPKCS12Import() erlaubte mir, das Passwort in Optionen anzugeben und das könnte der Grund sein, warum SecCertificateAddToKeychain() ein solches Zertifikat nicht hinzufügen konnte. Stefan Arentz hat mir gesagt, wie man ein .der-Zertifikat erstellt, und ich habe es mit SecCertificateAddToKeychain() auch mit dem KeychainAccess-Dienstprogramm zum Schlüsselbund hinzugefügt, beide Male ohne ein Passwort zu benötigen. Hinzufügen von .p12 Zertifikat erforderlich Passwort in Code und mit dem Dienstprogramm. Sieht so aus, als müsste ich mehr über Zertifikate und ihre Unterschiede lernen - .cer, .pem, .der, .p12, ... – IgorD