Edited at

[iOS] プロビジョニングファイルと証明書の意味

More than 3 years have passed since last update.

いまだになにがどうしてどうなる、みたいなところが明確ではありません。

ので、把握するという意味でメモを残しておこうと思います。


iOS実機にアプリをインストールするために必要なもの


  • 正規開発者証明書

  • デバイス識別子

  • アプリケーションID

  • プロビジョニングファイル


デバイス識別子

開発中(やアドホック用)の、アプリを動かしたいデバイスの識別子


アプリケーションID

アプリケーションを識別するID


プロビジョニングファイル

開発中(やアドホック用)アプリを、iPhone/iPadの実機にインストールするために必要。

プロビジョニングファイルは、アプリケーションIDデバイス識別子正規開発者証明書の関係をまとめたファイルです。

これを実機に登録しておくことで、条件にあったアプリをインストールすることが可能になります。


大まかな流れ

大まかな流れは以下になります。


  1. Mac上で公開鍵・秘密鍵を生成し、公開鍵を含めたCSR(Certificate Signing Request - 証明書署名要求)をAppleに送り、 正規開発者証明書 を発行してもらう ※1

  2. 取得後、証明書をMacのキーチェーンに登録する

  3. 証明書やアプリID、デバイスなどの情報を元に プロビジョニングファイル を作成する

※1...この証明書は、開発用・配布用の1つずつ必要となります。


なぜこうする?

なんでこんなめんどくさいことをするのでしょうか。

アプリを実機にインストールするには色々な懸念事項を払拭する必要があるのです。

(例えば悪意ある第三者からのアプリを本物と間違えてインストールしないようにしたり、など)

そこで、「誰のどのマシンでどのデバイス向けに作られたアプリか」、というのを色々な技術を利用して「本物のアプリである」というのをiOSデバイスに識別させているのです。

発行手順やら登録手順やら色々あって混乱してしまいますが、一言で言えば 信頼のおける相手からのアプリだけインストールできるようにする ということをあれこれやっている、というわけですね。


つまり

以上を前提に必要な情報を見返してみると、「証明書」と「デバイス情報」と「アプリID」を明確にした上で、それらの関係をまとめる「プロビジョニングファイル」を作成し、それを実機に登録することで「本物のアプリを識別する」という内容になるわけです。

仕組みを理解しておくと問題が起きたときに問題箇所を特定するのに役立つので覚えておくといいと思います。

やっと、プロビジョニングファイルの仕組みを把握できた気がします( ;´Д`)


証明書について

これはiOS関係ないですが、CSRとかなんでやるのでしょうか。

自分もまだ本を読んでなんとなく理解したにすぎないですが、公開鍵・秘密鍵だけでは問題があるからのようです。

秘密鍵で暗号化するだけでは、悪意ある第三者になりすましをされる可能性がある、と。

(公開鍵を偽装して渡されたら本物のアプリがインストールできない?)

そこでこの鍵の仕組みを、Appleの証明書を利用することで解決しよう、というのがここでの話になります。

つまり、第三者的な位置にAppleが立つことによって、「渡された公開鍵が本物であるという証明をする」というわけです。

(ちょっと具体的なことはまだ理解しきれていないので説明できませんが、要は公開鍵・秘密鍵方式の鍵を証明する、ということが目的です)

・・iOSアプリの申請大変ですね( ;´Д`)


参考記事

ちなみにこちらのiOSアプリのプロビジョニング周りを図にしてみるという記事に、内部でどういうことをやっているのか、というのを図解してくれていました。

これをしっかり把握できれば、多少のエラーや問題が起きた時は対処できそうな気がします。


手順

ちなみに上記で図解しているものを箇条書きにすると以下の感じ。


  1. 自分のPC上で、秘密鍵/公開鍵ペアを生成する

  2. CSR(Certificate Signing Request - 証明書署名要求)を、(1)の公開鍵を付けてAppleに送る

  3. (2)の公開鍵を含む証明書を作り、認証局の秘密鍵で暗号化

  4. (3)の証明書をダウンロードし、キーチェーンへ登録

  5. [DevCenter] App IDを登録

  6. [DevCenter] Deviceを登録

  7. (3), (5), (6)の情報を関連付ける=プロビジョニングファイルの作成(つまりプロビジョニングファイルにはこの3つの情報が格納される)

  8. プロビジョニングファイルをダウンロードし登録

  9. ビルド設定を行う(BundleID, コードサイニング)

  10. ビルド、アーカイブ(ipaファイル作成 ※)

※ ipaファイルにはアプリ本体とプロビジョニングファイルを含み、さらにそれ全体を(1)で生成した秘密鍵で暗号化(コードサイニング)

つまり、最初のほうで送った公開鍵がプロビジョニングファイルに含まれ、さらにそれが認証局によって暗号化されています。

この仕組が第三者からの改変を防いでくれる、ということのようです。