• トップ
  • ブログ一覧
  • 非モバイルエンジニアでも分かるiOSの証明書
  • 非モバイルエンジニアでも分かるiOSの証明書

    加納(エンジニア)加納(エンジニア)
    2023.11.27

    IT技術

    はじめに

    iOSアプリにどうやってもついてまわる証明書ですが、何かとエラーの原因になりがちではないでしょうか

    • 更新のたびにすっかり忘れてしまって資料を探している
    • 作り方は分かるけど、実際何をしているか良くわからない…
    • 急にiOSアプリの対応をすることになったけど、証明書の仕組み自体が良くわからない!

    自分自身、急な対応で混乱したり、非モバイルエンジニアの方に何度も説明したりを繰り返して溜め込んできた忘備録を、
    非モバイルエンジニアでもチョットワカルようになるiOS証明書について
    として整理しましたので、皆様もチートシートとしてご活用ください。

    iOSアプリの証明書って?

    apple製品の開発をしたことがない人にとっては聞き馴染みのないものだと思いますが、

    iOSアプリの身元を証明するため、Appleから発行・登録される証明書

    のことです。
     不正なアプリが出回らないように、正規のアプリであるという証明書のないアプリはOSから弾かれて使用できないようになっていますので、ビルドやインストール、配布等をするために必要になってきます。
     この証明書、種類や仕組みを理解していないと一見しただけでは不可思議な不具合が多発しがち…今回はアプリのビルドに必要な最低限の証明書について、解説していきます。

    Appleに登録する2つの証明書

    Provisioning Profile(アプリ証明書)
    Certificate(開発者証明書 or 配布証明書)について

    よく混乱を招くのは、証明書にいくつかの種類があることです。他にも色々な証明書がありますが、
    ビルドと配布のために必要な2つの証明書について説明します。

    UI交えての実際の作り方は、 こちらに上がっているのでぜひ御覧ください!

    Provisioning Profile

    Apple Developerのドキュメントでは、以下のように記載されています。

    プロビジョニングプロファイルは、アプリに対して特定のアプリサービスの使用を許可するとともに、デベロッパがそのアプリを開発、アップロード、配信している既知のデベロッパであることを保証します。各プロビジョニングプロファイルには、1つまたは複数のアプリに合致するアプリIDが1つ、そして配布用証明書が1通含まれています。

    Provisioning Profileは、アプリが正規のものであることを証明するための証明書です。
    ・Appleに登録されているデベロッパーによって配信されていること
    ・アプリが改竄されていないこと

    を証明するために、ipaファイル(iosのアプリファイル)に同梱されます。

    アプリが使用する機能についての情報や、provisioningの種別によって利用できる端末の制限なども管理します。

    Provisioning Profileの種別

    大別してDevelopment(開発用)と、Distribution(配布用)の二種類があり、これはこの後説明するCertificateの種類にも関わってきます。
    それぞれ利用に制限があるため、状況に応じて使い分けます。

    Development
    (開発用)
    iOS App Development開発用。ProvisioningProfileに紐づけされた端末にしかインストールできない。
    Distribution
    (配布用)
    App Storeストア配布用。ストアにアップロードし、ストアを経由しないとインストールできない
    AdHoce社内配布用。ProvisioningProfileに紐づけされた端末にしかインストールできない。
    InHouse社内配布用。誰でもインストール可能。Enterprise契約限定。
    近々Enterpriseが廃止されるらしく、使用できなくなる。

    Certificate

    アプリのビルドに使用するのは Distribution Certificate(配布証明書) Development Certificate(開発者証明書)です。
    ・アプリの開発者が正規であること
    ・アプリが改竄されていないこと

    を証明するためにアプリ作成時の署名に使用されます。

    Certificateの種別

    Certificateには2つの種類があり、ProvisioningProfileの種類によって使用する種類が異なります。

    Apple Development
    (Xcode10以前:iOS App Development)
    Development Certificate(開発者証明書)ProvisioningProfileの種別がDevelopmentの際に使用
    Apple Distribution
    (Xcode10以前:iOS Distribution)
    Distribution Certificate(配布証明書)ProvisioningProfileの種別がDistributionの際に使用

    ipaファイルをビルドするまでの流れ

    ProvisioningProfileはアプリに証明と情報を付与、Certificateは製作者を証明するものという知識の上で、
    証明書が発行されアプリがビルドされるまでの流れを上から追っていきます。

    上半分ではCertificateの作成を行っています。

    1. (上段左~中)開発環境で暗号化のキーペアを作成し、その公開鍵を含んだCSRファイルを作成します。
    2. (上段中~中段右)CSRファイルと登録したいCertificateの種類をAppleに申請することで、CertificateファイルがAppleDeveloperに登録されます。
    3. (中段)CertificateファイルをダウンロードしてMacのキーチェーンに登録すると、自動で、持っている秘密鍵と結び付けて管理してくれます。

    これでCertificateの準備が出来ました。
    ※実際Macで作成する際は、CSRファイルを作成する時にキーペアも一緒に作ってくれるようです

    次はProvisioningProfileを作成します。(中段)

    1. AppleDeveloper上で、「アプリの署名に使うCertificate」「AppID」「使用する機能」(登録されたデバイスでしか利用できないタイプであった場合はデバイスの「UDID」)を登録し、ProvisioningProfileを作成します。
    2. ビルドの際に必要になるため、開発環境にダウンロードします。

    そしてビルドの際は、

    1. アプリが改竄されていないことを証明するため、Certificateを抱えたProvisioningProfileをアプリファイル内に含める必要があります。
    2. また、そのアプリに署名をするためにCertificateと対応した秘密鍵が必要です。

    最初に作成した秘密鍵は開発環境の外に一切持ち出されていません。
    つまり、この秘密鍵で署名されていることが開発者とアプリを証明することになります。

    これで、ビルド時に必要なものと、なぜ必要なのかが把握できるのではないかと思います。

    おまけ:証明書の種類がすぐ分かる早見表

    Provisioning Profileの種類使用する
    Certificate
    Development
    (開発用)
    iOS App Development開発者証明書
    Apple Development
    (Xcode10以前:iOS App Development)
    開発用。要デバイス登録。
    ProvisioningProfileに紐づけされた端末にしかインストールできない。
    Distribution
    (配布用)
    App Store配布証明書
    Apple Development
    (Xcode10以前:iOS App Development)
    ストア配布用。
    ストアにアップロードし、ストアを経由しないとインストールできない
    AdHoce社内配布用。要デバイス登録。
    ProvisioningProfileに紐づけされた端末にしかインストールできない。
    InHouse社内配布用。誰でもインストール可能。Enterprise契約限定。
    近々Enterpriseが廃止されるらしく、使用できなくなる。

    まとめ

    これで
    ・Certificateの秘密鍵? p12ファイルって何?
    ・ビルドする時にどのCertificateが必要なんだ?
    ・特定のProvisioning Profileでビルドしたアプリがインストールできない!
    みたいな問題はすべて解決しましたね!

    ぜひ、誰かに説明する必要がある時や、ふと忘れてしまった時のチートシートとしてご活用ください。

    加納(エンジニア)

    加納(エンジニア)

    おすすめ記事