web-dev-qa-db-ja.com

codesignは、端末を介したID検出エラーを常に提供しません。

既存の質問に目を通しましたが、問題を解決したものはありません(証明書の再作成など)。アプリ内に実行可能ファイル、フォルダー、フレームワークがほとんどないアプリを作成しました。 codesign -s "our identity"を実行しようとすると、my.appは常にIDを検出しません。誰かがこれのステップバイステップのプロセスを与えることができます。

codesign -s "Developer ID Application: Sai***** (123123123J)" out/Release/Sai.app

エラー

Developer ID Application: Sai****** (123123123J): no identity found,

「開発者IDアプリケーション」とシリアル番号を削除しようとしましたが、すべて同じエラーが発生します

これらのヘルプを探しています lines

ありがとうございました

34
Saikrishna

私はApple開発コード署名のためにこれをしませんでしたが、そのような問題をデバッグするのに役立ついくつかの貴重な内部がまだあると思います。違いは、取得中に独自の証明書を作成したことですAppleからの1つ。

証明書の信頼性を確認します。コード署名に対して信頼されている必要があります(キーチェーンアクセスの証明書ビューの信頼セクションの最後から3番目であるヨセミテ上)。コード署名のために、証明書がログインキーチェーンに含まれている必要があることに注意してください。システムキーチェーンに必要です。

拡張機能の目的である「コード署名」が欠落しているため、最初は証明書がキ​​ーチェーンへのコード署名で知られていませんでした。キーチェーンを調べて証明書をダブルクリックすると、これを見つけることができます:

enter image description here

私はそれを修正しました(Appleは証明書を提供します。拡張子はそこにあるはずです)

enter image description here

次に、証明書をキーチェーンからデスクトップにドラッグ&ドロップして、〜/ Desktop/gdb-cert.cerを作成した後、証明書を信頼された署名証明書に追加しました(-dと-r trustRootを省略できることに注意してください:

$ Sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

これは少しトリッキーでした。なぜなら、私はいくつかのインターネットの投稿に誤解されていて、マニュアルページを見ていなかったからです。 add-trust( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt )を使用する必要があると言う人もいました。ひどいのは、コマンドは成功したが、本来すべきことをしなかったことでした。

その後、次のように信頼できる証明書で新しい証明書を見つけました。

$ security find-identity -p codesigning

Policy: Code Signing
  Matching identities
      1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
      2) ACD43B6... "gdb-cert"
  2 identities found

  Valid identities only
      1) ACD43... "gdb-cert"
  1 valid identities found

私の場合、Apple certは期限切れですが、gdbに署名するために使用していたものはそうではありませんでした(私は自分で作成しました)。また、ポリシーの名前は「security add-trusted-cert」(-p codeSign)および「security find-identity」コマンド(-p codesigning)。その後、gdbに署名しましたが、常に次のようになりました。

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
  gdb-cert.cer: no identity found

証明書ファイルのファイル名を--signオプションに指定する必要があるという印象を受けていましたが、実際には、提供する必要があり、トラストストアにある必要がある証明書のCNでした。キーチェーンの証明書をダブルクリックすると、ここでCNを見つけることができます。

enter image description here

または、上記の「security find-identity -p codesigning」の出力で。それから私は署名に進み、それに適切なキーチェーンを与えなければなりませんでした。あなたの場合、これは〜/ Library/Keychains/login.keychain、私の場合はSystem.keychainでなければなりません:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb` 

それは私に働くgdbを与え、署名されたアプリケーションを与えるはずです。

22
user637338

私もこれに問題がありました。コード署名IDがキーチェーンにあることを再確認してください。-sの後の名前の代わりにSHA-1フィンガープリントを使用することを検討してください。

SHA-1フィンガープリントを見つけるには、Keychain Accessを開き、Developer ID Application: FOO証明書を選択して、Get Infoを選択します。ここから、Fingerprintsに達するまで情報の下部までスクロールします。ここのSHA-1フィンガープリントはコピーでき、すべてのスペースを削除する必要がありますが、その後、コード署名ステートメントの-sの後に配置するのに適した40文字の識別子があります。

それでもキーを見つけるのに問題がある場合は、ターミナルから次のことを試してください。

certtool y | grep Developer\ ID

Developer ID ApplicationCommon Nameがあるものを探し、証明書が実際にターミナルからアクセス可能なキーチェーンにあることを確認します。応答に何も表示されない場合は、Terminalセッションで資格情報を含むキーチェーンが利用できないことを示しています。これには、キーチェーンがロックされている、別のユーザーとして実行されているシェル、異なる権限(Sudoなど)でコマンドを実行しているなどが含まれます。

上記のコマンドを実行した後、少なくとも次のものが必要です。

Developer ID Application: <your company name>
Developer ID Installer: <your company name>
Developer ID Certification Authority

3つすべてを持っていない場合は、不足している要素をダウンロードしてください。現在、インストーラをビルドするためにneedを使用することはできませんが、インストールしても問題はありません。アプリケーションおよびインストーラー要素は、 Appleのデベロッパーサイト証明書、識別子、プロファイルタブのMac証明書セクションからダウンロードできます。失効していないリスティングがそこにあるはずです。有効期限が切れたリスティングもあります。キーチェーンに証明書をインストールするには:

  1. Apple Developer Siteにアクセスします
  2. Mac Dev Centerにアクセスします
  3. アクセス証明書、識別子、プロファイルリンク
  4. ポータルから証明書をダウンロードします
  5. 証明書をダブルクリックすると、キーチェーンアクセスが開きます
  6. キーチェーンアクセスを許可して、キーチェーンに証明書を追加します

開発者ID証明機関はXcodeによってインストールされているはずですが、インストールされていない場合は、自分でインストールできます。 デベロッパーID機関 から個別にダウンロードするか、証明書タブの+リンクをクリックして、下部のリンクを使用して証明書をダウンロードする必要があります。

これは、いくつかの署名ツールの基礎となるApple Worldwide Developer Relations Certification Authorityを持っていることを確認する良い機会でもあります。 XcodeインストーラーによってSystemキーチェーンにインストールする必要があり、上記のCertificatesタブの+リンクまたは Apple WWDR CA

Appleの App Distribution Guide によると、証明書とキーのそれぞれに適切な特定のキーチェーンがあります。

  • 秘密鍵と署名証明書(開発者IDインストーラー開発者IDアプリケーション、およびApp Store証明書)は、loginキーチェーンにある必要があります
  • Apple Worldwide Developer Relations Certification AuthorityおよびDeveloper ID Certification Authorityは、Systemキーチェーンに属します
  • 開発者の証明書は、loginキーチェーンにも属します

キーチェーンのメンテナンス

Xcodeはキーチェーンを自動的に操作し、プロファイルが変更されるといくつかの証明書が定期的に再発行されるため(開発者IDではなく、複数年の証明書を持ち、プロファイルを必要としないため)、不要な伝播が発生する可能性がありますキーチェーン内の証明書が混乱する可能性があります。 Xcodeの混乱を招く可能性があるため、有効期限が切れたらこれらを削除することをお勧めします。

[〜#〜]警告[〜#〜]

  • キーチェーンのメンテナンスを実行する前に、キーチェーンのバックアップがあることを確認してください
  • このプロセスは、開発に関連する不要な証明書を削除することを目的としています。証明書がMac Developerrd Party Mac DeveloperiPhone Developerで始まらない場合=または開発者ID、現時点ではそれらを混乱させないでください。 (たとえば)メールで受け取った証明書を誤って削除した場合、期限が切れていても、受け取ったメールを読むことができない場合があります。

やる事:

  1. Xcodeを終了
  2. キーチェーン応急処置を実行し(Keychain Accessから)、キーチェーンが正常であることを確認します
  3. 左側のサイドバーの証明書カテゴリをクリックします
  4. 上記の種類の期限切れの開発者証明書を見つけます。右下隅に小さな[〜#〜] x [〜#〜]が表示されます。
  5. 削除する証明書を選択し、File> Export Items ...を使用してバックアップします
  6. このファイルを安全な場所に置き、適切なパスワードを入力してください
  7. バックアップした証明書を削除します
  8. 残りの証明書を調べて、前のセクションで説明した証明書があることを確認します。そうでない場合は、ダウンロードする必要があり、場合によっては更新する必要があります。
  9. 証明書が上記のキーチェーン内にあることを確認します(たとえば、すべての署名証明書はloginキーチェーン内にある必要があります)
52
gaige

答えは最終的に非常に簡単でした。秘密鍵がありませんでした。このため、証明書を取り消して、開発者プログラムの手順に従いました(特に、プロセス中にCSR証明書を作成しました。証明書を取り消さない限り、何度か取得しませんでした)。

9
Saikrishna

として

certtool y | grep "Developer ID Application: xxxx"

結果を表示できませんでした。目的のキーチェーンへのアクセスの問題だと思います。最初に確認したのは、キーチェーン自体の任意のアプリケーションからプライベートキーにアクセスできることでした。その後、k=/Users/myUser/Library/Keychains/login.keychainオプションcerttoolコマンドで、これが成功したので、同じことをしました

codesign --keychain /Users/myUser/Library/Keychains/login.keychain --force --verbose -s "Developer ID Application: xxxx"

3
Rosario Carcò