指定された項目がキーチェーン内に見つかりませんでした


[2018年6月12日追記を追加しました]


iOSアプリ開発時に、開発用プッシュ通知証明書と同じ秘密鍵で、AdHoc用プッシュ通知証明書を作ろう
として、CSRを作成しようとしたら、キーチェーンから


「指定された項目がキーチェーン内に見つかりませんでした」


と怒られてしまい、困ったので解決方法を紹介します。(日本語だと、Googleで検索しても回答がなかったので)


原因:秘密鍵に対応する公開鍵が、キーチェーンに登録されていないため。

http://stackoverflow.com/questions/16845169/error-when-trying-to-obtain-a-certificate-the-specified-item-could-not-be-found


解決方法:秘密鍵から公開鍵を作り、キーチェーンに登録する

http://stackoverflow.com/questions/16847081/i-lost-my-public-key-can-i-recover-it-from-a-private-key


1. まず、キーチェーンから秘密鍵をp12形式で保存する。(例えば、private.p12)
2. openssl pkcs12 -in private.p12 -out private.pem
(先に入力したパスワードを入力したあと、pem用の新しいパスワードを設定する)
3. openssl rsa -in private.pem -pubout > public.pem
4. security import public.pem -k login.keychain


Imported keyといった表示がされているので、適切な名前に変更する。

これで大丈夫でした。

[2018年6月12日 追記]

現在は、上記の方法でキーチェーンからCSRが作成出来なくなってしまったようです。(もしかしたら、MacOSの不具合でそのうち治るかも?)

なので、ちょっと面倒ですが、現在は、pem形式の秘密鍵を取得したら、直接opensslコマンドでCSRを作成しています。

例えば、
ユーザーのメールアドレス: tarouyamada@gmail.com
通称:Tarou Yamada
秘密鍵ファイル: private.pem
だとすると、次のコマンドを実行します。


$ openssl req -new -key private.pem -out CertificateSigningRequestForDev.certSigningRequest -subj "/emailAddress=tarouyamada@gmail.com, CN=Tarou Yamada, C=JP"

これで、CertificateSigningRequestForDev.certSigningRequestというCSRファイルが出来ます。

[2023年6月7日 追記]

一応、追記で、秘密鍵(pem)の作り方


$ openssl genrsa -des3 -out 秘密鍵のファイル名 2048