2017-05-27 5 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

私はKeychain Accessアプリからアクセスできます。それはパスを尋ね、赤いxと「信頼できない」発言でキーチェーンに入れます。 noErrに関しては、これは可能な限り小さな行で単純化されたコードです。 – IgorD

+1

PKCS#12の代わりにDER形式としてインポートするのはどうですか?あなたは 'openssl x509 -outform der -in certificate.pem -out certificate.der'でこれを試すことができますか? –

答えて

2

SecCertificateCreateWithDataは、PKCS#12ではなくX.509形式でのみ記述されています。 P12の場合

あなたは(あなたが明示的にそれらをインポートするにキーホルダー与えない限り、秘密鍵をインポートされません - 例えばSecKeychainCopyDefault)をSecPkcs12Import(デフォルトでは、デフォルトのキーチェーンにインポートされます)またはSecItemImportをしたいです。

+0

ありがとうございます。 SecPKCS12Import()でオプションでパスワードを指定することができました。そのため、SecCertificateAddToKeychain()がそのような証明書を追加できなかった可能性があります。 Stefan Arentzは.der証明書を作成する方法を教えてくれました。私はSecCertificateAddToKeychain()とKeychainAccessユーティリティを使ってキーチェーンにパスワードを追加することなく両方の時間を追加できました。 .p12証明書にコードとユーティリティで必要なパスワードを追加する。証明書とその違いについて詳しく知る必要があるようです - .cer、.pem、.der、.p12、... – IgorD

関連する問題