@Joseph_Lee

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Objective-CでPKCS12証明書をインストール

Q&A

Closed

解決したいこと

現在はMacOSにプログラムで「p12」証明書をインストールしたいです。

が、問題は発生しています。
インストールができないです。

発生している問題・エラー

(lldb) po PKCS12Data
 nil

DEBUGする時、「PKCS12Data」がNILLになっています。

私のコードは以下です。

    NSString *certpath = @"~/Desktop/TEST01_3C1.p12";
    NSString *certPassword = @"12345678";
    NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:certpath];
    CFDataRef inPKCS12Data = (__bridge CFDataRef)PKCS12Data;
    CFStringRef password = (__bridge CFStringRef)certPassword;
    const void *keys[] = { kSecImportExportPassphrase };
    const void *values[] = { password };
    CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL);
    CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL);
    OSStatus securityError = SecPKCS12Import(inPKCS12Data, optionsDictionary, &items);
    if (securityError == 0) {
        NSLog(@" *** インストールを成功しました。 ***");
    } else {
        NSLog(@" *** インストールを失敗しました。 ***");
    }

お願い

いろいろに調べてもわからなかったんで、ここで質問いたしました。
ご意見いただければ幸いです。:frowning2:

0 likes

1Answer

-[NSData initWithContentsOfFile:]~/ を含んだパスに対応していません。 -[NSString stringByExpandingTildeInPath]certpath を絶対パスに変換しておく必要があります。

NSString *certpath = [@"~/Desktop/TEST01_3C1.p12" stringByExpandingTildeInPath];
// certpath is now @"/Users/XXX/Desktop/TEST01_3C1.p12"
0Like

Comments

  1. @Joseph_Lee

    Questioner

    ご回答いただき、ありがとうございます。
    実は、私も絶対バスで試したのですが、変わらず、nilになっています。泣
  2. Mac のセキュリティ機能でデスクトップフォルダへのアクセスが禁止されているかもしれません。 Mac のシステム環境設定→セキュリティとプライバシー→プライバシー→フルディスクアクセスを開いて、そのプログラムのディスクアクセスを許可してください。

    あるいは、初めからアクセスが許可されているディレクトリに証明書を移動して試してください。 /tmp/TEST01_3C1.p12 に置けばアクセスできると思います。
  3. @Joseph_Lee

    Questioner

    ありがとうございます。やってみます。
    プログラムは問題ないでしょうね、書き間違いとか、ないですかね。。
    これは心配です。泣
  4. 見た感じ書き間違いはないと思いますよ。

Your answer might help someone💌