Skip to main content

コードプッシュによるコード署名

概要

コード署名は、CodePush バンドル (JavaScript 更新) にデジタル署名を追加するセキュリティメカニズムです。この署名により、クライアントアプリは、信頼できるソースがアップデートを作成したこと、および配信中に改ざんされていないことを確認できます

コード署名は、CodePush バンドル (JavaScript 更新) にデジタル署名を追加するセキュリティメカニズムです。この署名により、クライアントアプリは、信頼できるソースがアップデートを作成したこと、および配信中に改ざんされていないことを確認できます

CodePush のコード署名は、次の 3 段階で行われます。

  1. RSA キーペアの生成:

    • プライベートキーは CodePush バンドルの署名に使用されます。

    • 公開鍵は、署名を検証するためにモバイルアプリに埋め込まれています。

  2. CodePushアップデートをリリースすると、Bitrise CodePush CLIはプライベートキーを使用してバンドルに署名します。このプライベートキーでデジタル署名されたバンドルのハッシュを含む JWT (JSON Web Token) を作成します

  3. モバイルアプリ (公開鍵が埋め込まれている) は、更新を適用する前に JWT 署名を検証します。検証に失敗すると、更新は拒否されます

アプリへの署名

iOS

アンドロイド

  1. CodePushNext React Native SDK のバージョン 5.1.0 以降を使用してください。以前のバージョンはコード署名をサポートしていません

    SDK は次の場所にあります。 CodePushNext リポジトリー

  2. コード署名機能を利用するには、Bitrise CodePush CLIのバージョンが1.0.0以上であることを確認してください。

  3. オープン SSL を使用して PEM フォーマットで RSA キーペアを生成します。

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

    秘密鍵は安全に保管し、決して共有しないでください。公開鍵はアプリ自体に埋め込まれます。

  4. アプリの内部に公開鍵文字列を追加します。 Info.plist:

    <key>CodePushPublicKey</key>
    <string>-----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArVJ2k...
    -----END PUBLIC KEY-----</string>
  5. iOS アプリを更新して再構築する react-native-code-push コード署名をサポートする SDK (5.1.0 以上)。

  6. Bitrise CodePush CLIを使ってアップデートをバンドルして署名しましょう。出力ディレクトリーには CodePush という名前を付ける必要があります。

    bitrise :codepush bundle --platform ios --private-key-path ./private_key.pem

    署名された JWT (.codepushrelease file) はバンドルディレクトリ内で生成され、サーバーにアップロードされます。アップロードされた .zip ファイルには、次の両方が含まれます。 .codepushrelease ファイルとバンドルされた出力ファイル。

  7. すでにバンドルされているアップデートをプッシュしてください:

    bitrise :codepush push ./CodePush \
      --deployment Staging \
      --app-version 1.0.0 \
      --private-key-path ./private_key.pem

    ヒント

    オプションで、1 つのコマンドをバンドル、署名、プッシュできます。

    bitrise :codepush push --bundle --platform ios \
      --deployment Staging \
      --app-version 1.0.0 \
      --private-key-path ./private_key.pem
  1. CodePushNext React Native SDK のバージョン 5.1.0 以降を使用してください。以前のバージョンはコード署名をサポートしていません

    SDK は次の場所にあります。 CodePushNext リポジトリー

  2. コード署名機能を利用するには、Bitrise CodePush CLIのバージョンが1.0.0以上であることを確認してください。

  3. オープン SSL を使用して PEM フォーマットで RSA キーペアを生成します。

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem

    秘密鍵は安全に保管し、決して共有しないでください。公開鍵はアプリ自体に埋め込まれます。

  4. に公開鍵文字列を追加します /android/app/src/main/res/values/strings.xml:

    <resources>
        <string name="CodePushPublicKey">-----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArVJ2k...
    -----END PUBLIC KEY-----</string>
    </resources>
  5. CodePush クライアントインスタンスを設定します。

    コンストラクターを使用できます。

    new CodePush("deployment-key", getApplicationContext(), BuildConfig.DEBUG, R.string.CodePushPublicKey);
    

    または、ビルダーを使用することもできます。

    new CodePushBuilder("deployment-key", getApplicationContext())
        .setIsDebugMode(BuildConfig.DEBUG)
        .setPublicKeyResourceDescriptor(R.string.CodePushPublicKey)
        .build();
  6. Android アプリをアップデートしてリビルド react-native-code-push コード署名をサポートする SDK (5.1.0 以上)。

  7. Bitrise CodePush CLIを使ってアップデートをバンドルして署名しましょう。出力ディレクトリーには CodePush という名前を付ける必要があります。

    bitrise :codepush bundle --platform android --private-key-path ./private_key.pem

    署名された JWT (.codepushrelease file) はバンドルディレクトリ内で生成され、サーバーにアップロードされます。アップロードされた .zip ファイルには、次の両方が含まれます。 .codepushrelease ファイルとバンドルされた出力ファイル。

  8. すでにバンドルされているアップデートをプッシュしてください:

    bitrise :codepush push ./CodePush \
      --deployment Staging \
      --app-version 1.0.0 \
      --private-key-path ./private_key.pem

    ヒント

    オプションで、1 つのコマンドをバンドル、署名、プッシュできます。

    bitrise :codepush push --bundle --platform android \
      --deployment Staging \
      --app-version 1.0.0 \
      --private-key-path ./private_key.pem

Expo のコード署名サポート

CodePushNextとBitrise CodePush CLIはどちらもエキスポプロジェクトのコードサイニングをサポートしています。全体的なフローは標準の React Native アプリと同じです。RSA キーペアを生成し、パブリックキーをアプリに埋め込み、リリース時に--private-key-path フラグを使用してバンドルに署名します

マネージドExpoワークフローの主な違いは、公開鍵の埋め込み方法です。これには通常、次のものが必要です。 EAS ビルド とカスタム設定プラグイン。アップデートをバンドルしてプッシュするときは、標準を使用してください bitrise :codepush 通常どおりのコマンド。

注記

ザ・ --sourcemap-output フラグは Expo プロジェクトではサポートされていないので省略してください。