ソースはこちらです。 Stackoverflow とインターネット 🤓。
アップルの定義です。
Androidとは異なり、iOS デバイスにはどんなアプリでもインストールできるわけではありません。 まず Apple によって署名される必要があります。 しかし、アプリを開発しているとき、おそらく Apple に送信して承認を得る前にテストしたいと思うでしょう。 プロビジョニングプロファイルは、デバイスとデベロッパアカウントの間のリンクとして機能します。 開発中に、どのデバイスでアプリを実行できるか、どのアプリサービスにアクセスできるかを選択します。 プロビジョニングプロファイルは、デベロッパアカウントからダウンロードされ、アプリのバンドルに埋め込まれ、バンドル全体がコード署名されます。 開発プロビジョニングプロファイルは、アプリケーションコードを実行したい各デバイスにインストールする必要があります。 プロビジョニングプロファイルの情報が特定の条件に一致しない場合、アプリは起動しません。
各開発プロビジョニング プロファイルには、以下のものが含まれます。
- Development Certificates – 開発証明書です。 これらは、コードを書きながら物理デバイス上でアプリをテストしたい開発者向けです。
- Unique Device Identifiers (アプリが実行できるデバイスのリスト)
- App ID (これは、類似のバンドル識別子を持つ多くのアプリケーションに使用するための * ワイルドカードを含むことができます)。 –
プロビジョニング プロファイル内で指定されたデバイスは、プロファイルに iPhone 開発証明書が含まれている個人によってのみテスト用に使用できます。 A single device can contain multiple provisioning profiles.
So, What is happening when we connect the device to xcode and installs the app??
When you install the application on a device the following things happens:
- the provisioning profile in the Mac goes to the developer certificate in your key chain.
- xcode uses the certificate to sign the code.
- device’s UUID is matched with the IDs in the provisioning profile.
- AppID in the provisioning profile is matched with the bundle identifier in the app.
- The entitlements required are associated with the App ID.
- The private key used to sign the app matches the public key in the certificate.
Here is a screenshot from xcode signing section:
SO, 上の画像から、AppIDがチェックされ、証明書が検証され、Teamがマッチングされ、capabilitiesとentitlementsがマッチングされていることがわかります。
上記の手順がすべて成功した場合、署名済みのバイナリがデバイスに送信され、アプリ内の同じプロビジョニング プロファイルに対して検証され、最終的に起動されます。
開発プロファイルと配布プロファイルの違いは、配布プロファイルではデバイス ID が指定されないことです。
Distribution Profiles は、アプリを App Store に提出し配布するために使用されます。
それはいいとして、コード署名とは何ですか
アプリに署名することにより、iOS は誰がアプリに署名したかを識別でき、署名後にアプリが変更されていないことを検証できます。
非対称暗号
非対称暗号では、公開鍵と秘密鍵が使用されます。 ユーザーは秘密鍵を自分で管理しなければなりませんが、公開鍵は共有することができます。
非対称暗号の仕組み
ユーザAとユーザBがいると仮定します。
ユーザーAとユーザーBの間の通信を安全にするために、
- ユーザーAは自分のPublicKeyAをユーザーBと共有します 。
- UserB shares his PublicKeyB with UserA.
… and both users keep the private key with themselves.
When UserA sends a message to UserB,
- UserA encrypts the message with UserB’s PublicKeyB and send the message.
- This message can only be decrypted using UserB’s PrivateKeyB.
… The same thing happens when the UserB sends a message to UserA.
Watch this video for more understanding about asymmetric cryptography : Youtube video by savjee.
What is CSR(Certificate Signing Request) in iOS ??
CSR is not something that is used only in iOS. It is used in many places.
A CSR or Certificate Signing request is a block of encoded text that is given to a Certificate Authority when applying for a certificate.
Here , we create a CSR and give it to apple which will create the certificate for you. また、証明書に含まれる公開鍵も含まれています。 秘密鍵は通常、CSRを作成するのと同時に作成され、キーペアを作成します。 認証局はCSRを使ってあなたの証明書を作成しますが、あなたの秘密鍵は必要ありません。 秘密鍵は秘密にしておく必要があります。 特定のCSRで作成された証明書は、そのCSRで生成された秘密鍵でのみ機能します。
(optional – SSL 証明書の CSR の仕組みを理解するには、このリンクを参照してください。 手順と動作はほぼ同じです)
プロセス
- Keychain Access アプリケーションで Certificate Signing Request (CSR) を作成する。
- Keychain Application は
private key
certSigningRequest
ファイルを作成しますので、Apple にアップロードしてください。 証明書には、システムにダウンロード可能なpublic key
が含まれます。 ダウンロードした後、それをダブルクリックして、キーチェーン・アクセス・アプリケーションに入れる必要があります。 証明書はキーチェーンにプッシュされ、秘密鍵とペアになって Code Signing Identity を形成します。 - 最後に、アプリのインストール時に、アプリに署名するために使用される秘密鍵が、証明書の公開鍵と一致するかどうかを確認します。 失敗した場合、アプリはインストールされません。
以上です。
お楽しみに!
この記事を読んで楽しめたなら、他の人が見つけられるようにシェアして拍手をしてください👏👏👏!!
新鮮な記事をMediumでフォローすることができます。 また、LinkedInやTwitterで私とつながってください。
私は、このような活動を続けています。