web-dev-qa-db-ja.com

.ipaへの署名に使用されたプロファイル/署名証明書を確認する方法は?

多数の.ipaファイルがあり、スクリプトを使用してそれらを再署名しました。

では、プロビジョニングプロファイル/署名証明書をチェックして、正しい情報を使用していることを確認するにはどうすればよいでしょうか?

理想的には、任意の.ipaファイルを取得し、どのプロビジョニングプロファイル/署名証明書がその署名に使用されたかを確認できるようにします。

Backstory:エンタープライズ配布証明書の有効期限が切れているので、自分のものに再署名したい。これは、Xcodeで作成およびアーカイブしたすべてのものの単純な例ですが、サードパーティベンダーが配布物を作成した場合、それはできません。新しい.ipamightには未知の変更が含まれており、問題が発生するため、再署名された.ipaファイルの要求を避けたいと思うでしょう。あまりにも...しかし、私は最初の問題についてもっと心配しています。

古い配布証明書と新しい配布証明書の両方がまだ有効であるため(6か月の重複が発生します)、新しい配布証明書が使用されていることを確認する必要があります。 tは実際に仕事をします。

48
DBD

プロビジョニングプロファイルには、ターミナルコマンドを使用して表示できるUUIDがあります。

セキュリティcms -D -i(path_to_your_provisioning_profile)

次のようなコマンド出力のUUIDセクションを参照してください。

<key>UUID</key> <string>A008C022-7B82-4E40-8B37-172763E1E3CC</string>

Xcodeは、.appバンドル内のアプリケーションの署名に使用されるプロビジョニングプロファイルを挿入します。それを見つけるには、.ipaの名前を.Zipに変更し、Finderで解凍し、/ Payloadで.appファイルを見つけます。 .appファイルで「パッケージの内容を表示」し、embedded.mobileprovisionという名前のプロビジョニングプロファイルを見つけます。

上記のコマンドを使用して資格をダンプし、Xcode Organizer>デバイスタブ>「ライブラリ」の下のプロビジョニングプロファイルセクションのプロファイル内にあるUUIDと比較します。それらの「Finderで表示」を使用して、ディスク上の位置を表示できます。

64
Bobjt

パーティーに遅れて....

しかし、このツールは時間を節約します。 nomad/shenzhen

$ ipa info /path/to/app.ipa

+-----------------------------+----------------------------------------------------------+
| ApplicationIdentifierPrefix | DJ73OPSO53                                               |
| CreationDate                | 2014-03-26T02:53:00+00:00                                |
| Entitlements                | application-identifier: DJ73OPSO53.com.nomad.shenzhen    |
|                             | aps-environment: production                              |
|                             | get-task-allow: false                                    |
|                             | keychain-access-groups: ["DJ73OPSO53.*"]                 |
| CreationDate                | 2017-03-26T02:53:00+00:00                                |
| Name                        | Shenzhen                                                 |
| TeamIdentifier              | S6ZYP4L6TY                                               |
| TimeToLive                  | 172                                                      |
| UUID                        | P7602NR3-4D34-441N-B6C9-R79395PN1OO3                     |
| Version                     | 1                                                        |
+-----------------------------+----------------------------------------------------------+
25
maersu

これを確認してください: tool

IPAファイルまたはプロビジョニングプロファイルのタップスペースに詳細が表示されます

enter image description here

17
Ted

Bobjtの答えに基づいて、IPCUを使用してプロファイルの詳細を取得しました。

  1. .ipaの名前を.Zipに変更します
  2. Finderで解凍する
  3. / Payloadで.appファイルを見つけます。
  4. .appファイルで「パッケージの内容を表示」し、embedded.mobileprovisionという名前のプロビジョニングプロファイルを見つけます。

  5. MobileprovisioningファイルをiPhone構成ユーティリティにドラッグします

IPCUは、プロファイルの名前/有効期限などを示します。

13
HaemEternal

次のプロセスを使用して、正常にテストできました。

  1. 元の.ipaをデバイスにインストールします。
  2. [設定]-> [全般]-> [プロファイル]に移動します(古いプロビジョニングプロファイルを参照)
  3. デバイスからアプリと古いプロファイルを削除する
  4. アプリを辞任します。
  5. 再署名されたアプリをデバイスにインストールする
  6. [設定]-> [全般]-> [プロファイル]に移動します(新しいプロビジョニングプロファイルを参照)

これは、プロビジョニングプロファイルが更新されたことを確認する防弾の方法と思われます。プロファイルには1つの署名証明書しか含まれていないため、新しい証明書で署名する必要があります。

(しかし、私はまだより良い方法を見つけたいです)

4
DBD

最終的には、BobjtとHaemEternalのソリューション提案を組み合わせて使用​​しました。

  1. アーカイブを検索します。
  2. パッケージの内容を表示します。
  3. .appファイルをコピーする
  4. .appファイルのパッケージコンテンツを表示します。
  5. Embedded.mobileprovisionファイルをコピーします。
  6. 「security cms -D -i(path_to_your_provisioning_profile)」を実行します
  7. 手順6の呼び出しの結果からUUID番号を見つけます。
  8. Iphone構成ユーティリティを開き、プロファイルを見て、同じUUID番号を持つプロファイルを見つけます。
4
Lasse

特定の証明書が.ipaの署名に使用されたかどうかを判断しようとしている場合、次のことができます。

Pythonに慣れている場合は、作成したこのスクリプトを使用して、.ipaに埋め込まれている証明書を所有している証明書と比較できます。

https://Gist.github.com/ronsims2/1b7a8b9e15898f9406788988106b2f78

python ipa_cert_checker.py /Users/janedoe/Dcouments/Foobar.ipa /Users/janedoe/Dcouments/barfoo.cer

または、Macのコマンドラインからスクリプトが行うことを手動で行うこともできます。

  1. IPAアーカイブを解凍します。 「Payload」というフォルダが作成されます。

    unzip Foobar.ipa

  2. 埋め込まれたプロビジョニング情報を読みます。ペイロードディレクトリ内のパッケージ/フォルダは、.app拡張子を除いて.ipaと同じ名前が付けられていることに注意してください。

    security cms -Di Payload/Foobar.app/embedded.mobileprovision

上記のコマンドの出力では、証明書がbase64文字列としてキー「DeveloperCertificates」に関連付けられた配列データ要素に埋め込まれています。 3.証明書をコピーし(xmlタグを含めず、余分な空白がないことを確認します)、テキストとして便利な場所に保存します。この例では、「cert_from_foobar.txt」と呼びます

  1. Base64は既知の証明書をエンコードし、出力をファイルに保存します。

    base64 barfoo.cer > barfoo.txt

  2. 既知の証明書を、保存した埋め込み証明書と比較します。 cmp cert_from_foobar.txt barfoo.txt || echo 'These files are NOT the same.'

それらが同じ場合、メッセージは表示されません

1
Ron Sims II