P12ファイルとMobileprovisionファイルの解説:iPhone署名証明書について

Feather や KSign のようなオンデバイス署名ツールは、何かをインストールする前に2つのファイルを要求します。.p12証明書と.mobileprovisionプロファイルです。多くの人は、これらのファイルに何が含まれているか、何が問題になり得るかを知らないまま、誰かから入手しています。このガイドでは、Appleの公式ドキュメントを参照しながら、この2つのファイルとその確認方法、そしてリスクについて説明します。

まずはリスクについて

  • .p12ファイルには秘密鍵が含まれています。このファイルとそのパスワードを持っている人は、その開発者としてアプリに署名できてしまいます。公開したり、信頼できない相手に送ったりしないでください。
  • Appleはどの証明書でも失効させることができます。Appleのドキュメントには、「Appleは独自の裁量により、いつでもデジタル証明書を失効させることができる」と記載されています。失効が起きると、その証明書で署名されたアプリは動作しなくなります。
  • 共有証明書や購入した証明書は、最も失効しやすいものです。多くの見知らぬ人が公開配布に利用する証明書は、発行された本来の条件から外れています。いつ失効するかはコントロールできず、支払ったお金は通常返金されません。詳しくはエンタープライズ証明書の安全性についてをご覧ください。
  • 証明書はアプリの中身をチェックするものではありません。署名が示すのは誰がアプリに署名したかであって、そのアプリが安全かどうかではありません。IPAファイルは自分自身でチェックしましょう。IPAファイルのマルウェアスキャン方法をご覧ください。

.p12ファイルとは

署名証明書そのものは公開情報です。実際にアプリへの署名を可能にするのは、証明書とそれに対応する秘密鍵の組み合わせであり、この秘密鍵は開発者のMac上で作成されます。AppleのKeychain Accessガイドでは、.p12形式(Personal Information Exchange)について、「デジタル証明書と秘密鍵のバックアップとしてインポートできる」ファイルであると説明されています。エクスポートする際にはKeychain Accessがパスワードを要求し、再度インポートする際にはそのパスワードが必要になります。これが、署名ツールが.p12ファイルとパスワードを要求する理由です。

Appleはさまざまな種類の証明書を発行しています。App Store以外でiPhoneにインストールする際に関係してくるのは、開発用証明書、有料のApple Developer Programメンバーシップによる配布用証明書、そしてApple Developer Enterprise Programによる社内配布用証明書です。

.mobileprovisionファイルとは

プロビジョニングプロファイルとは、どのアプリを、誰の署名で、どの端末上で、どのような権限で実行できるかをApple が示す、Apple によって署名されたファイルです。Apple の技術文書 TN3125 には、その中身として以下が記載されています。

  • DeveloperCertificates: そのプロファイルが対象とするアプリの署名を許可する証明書です。お手持ちの.p12がこのいずれかと一致している必要があります。
  • App ID: ほとんどのプロファイルは単一のApp IDに対応しています。ワイルドカードApp IDを使えば複数のアプリに対応できます。
  • Devices: ほとんどのプロファイルは特定の端末をUDID(ProvisionedDevices)で指定しています。In-House(Enterprise)プロファイルの場合はProvisionsAllDevicesが設定されているため、どの端末でも動作します。詳しくはiPhoneのUDIDの確認方法をご覧ください。
  • ExpirationDate: すべてのプロファイルに有効期限が設定されています。この日付を過ぎるとプロファイルは無効になります。
  • Entitlements: プッシュ通知やApp Groupsなどの機能に関する許可リストです。Appleによれば、アプリが要求するすべてのEntitlementはプロファイルの許可リストに含まれている必要があります。

Appleの説明によると、端末はまずプロファイルの署名を確認し、その後アプリがプロファイルの条件を満たしているかを確認します。アプリの署名証明書、App ID、端末、Entitlementsのいずれかが一致しない場合、iOSはそのアプリを実行しません。

ファイルを自分で確認する方法

  • 署名ツール内で確認する: Featherの機能には「アプリや証明書に関する詳細情報」の表示が含まれているため、インポート後にそこで名前、種類、有効期限を確認できます。
  • Macで確認する: AppleのTN3125では、ターミナルで security cms -D -i profile.mobileprovision を使ってプロファイルをデコードする方法が紹介されています。出力にはExpirationDate、端末リストまたはProvisionsAllDevices、そしてEntitlementsが含まれます。
  • 証明書とプロファイルの組み合わせを確認する: .p12内の証明書は、プロファイルのDeveloperCertificatesのいずれかと一致している必要があります。この不一致は、署名ツールがインストール前にエラーを報告する一般的な原因です。

証明書ファイルでよくある問題

  • パスワードの間違い: .p12がインポートできません。パスワードを知っているのは、それをエクスポートした本人だけです。
  • プロファイルの有効期限切れ: それで署名されたアプリは、有効期限が過ぎると起動しなくなります。新しいプロファイルを取得して、アプリを再署名する必要があります。IPAファイルを再署名する方法をご覧ください。
  • プロファイルにデバイスが含まれていない: デベロッパー用やアドホックのプロファイルでは、UDIDが登録されている必要があります。登録されていないとインストールに失敗し、多くの場合「整合性を検証できませんでした」というエラーになります。整合性エラーの対処法をご覧ください。
  • 証明書の失効: それで署名されたすべてのアプリが一斉に使えなくなり、iPhone側の設定を変えても解決しません。失効後の対処法をご覧ください。
  • エンタイトルメントの不足: プロファイルで許可されていない機能を必要とするアプリは、インストールできてもその機能だけ動かなかったり、そもそもインストール自体ができなかったりします。

Scarlet iOSが向いているケース

Scarletでは、.p12やプロファイルを用意する必要はありません。Apple IDではなく、共有証明書で署名する仕組みになっているため、セットアップはシンプルですが、その一方でApple側がその証明書を失効させると、Scarlet経由でインストールしたすべてのアプリが起動しなくなります。Scarletの動作はiOS 14からiOS 26まで確認されており、iOS 27での対応は第三者から報告があるものの、公式には確認されていません。Apple Developer Programから取得した自分の証明書がある場合は、FeatherやKSignのような署名ツールが、それを直接利用します。それぞれのメリット・デメリットについては、オンデバイス署名とパソコンでの署名の比較をご覧ください。

よくある質問

無料のApple IDでも.p12とプロファイルは作れますか?

無料のApple IDでは、Xcode、Sideloadly、SideStoreなどのツールが管理してくれる個人チーム証明書が発行されます。そこから作られるプロファイルの有効期限は7日間です。.p12ファイル向けに作られた署名ツールは、基本的に有料のデベロッパー証明書を想定したものです。

ネットで共有されている証明書を使用するのは安全ですか?

失効するまでは動作しますが、失効は予告なくいつでも起こり得ます。また、他に誰が秘密鍵を保持しているかを知ることもできません。一時的なものとして扱い、重要なものには決して署名しないでください。

新しいプロファイルを作れば、失効した証明書は直りますか?

いいえ。プロファイルは許可する証明書を指定するものです。証明書が失効している場合は、別の証明書と、それを含むプロファイルが必要になります。

類似投稿