【美妍機房】關於android的keytool

Sign your app

本章內容來自android developer說明,前往鏈接

Android requires that all APKs be digitally signed with a certificate before they are installed on a device or updated. When releasing using Android App Bundles, you need to sign your app bundle with an upload key before uploading it to the Play Console, and Play App Signing takes care of the rest. For apps distributing using APKs on the Play Store (created before August 2021) or on other stores, you must manually sign your APKs for upload. This page guides you through some important concepts related to app signing and security, how to sign your app for release to Google Play using Android Studio, and how to configure Play App Signing. The following is a high-level overview of the steps you might need to take to sign and publish a new app to Google Play:

android 要求所有 APK 都必須經過數位憑證簽署,才能安裝到裝置上或進行更新。使用 Android App Bundle 發布時,您必須使用上傳金鑰簽署您的應用程式套件,然後再上傳到 Play 管理中心,Play 應用程式簽署計畫會負責處理休息 如果應用程式是在 Play 商店 (適用於 2021 年 8 月前建立的應用程式) 或其他商店採用 APK 形式發布,則必須手動簽署 APK 才能上傳。

本頁會介紹一些與應用程式簽署和安全性相關的重要概念、如何透過 Android Studio 簽署應用程式以發布至 Google Play,以及如何設定 Play 應用程式簽署功能。

以下簡要概略說明簽署新應用程式並發布至 Google Play 時必須採取的步驟:

  1. Generate an upload key and keystore

  2. Sign your app with your upload key

  3. Configure Play App Signing

  4. Upload your app to Google Play

  5. Prepare & roll out release of your app

  6. 產生上傳金鑰和 KeyStore

  7. 使用上傳金鑰簽署應用程式

  8. 設定 Play 應用程式簽署功能

  9. 將應用程式上傳到 Google Play

  10. 準備及推出應用程式版本

If instead your app is already published to the Google Play Store with an existing app signing key, or you would like to choose the app signing key for a new app instead of having Google generate it, follow these steps:

  1. Sign your app with your app’s signing key and select the option to encrypt and export its signing key.

  2. Upload your app’s signing key to Play App Signing.

  3. (Recommended) Generate and register an upload certificate for future updates to your app

  4. Upload your app to Google Play

  5. Prepare & roll out release of your app

如果您的應用程式已使用現有的應用程式簽署金鑰發布到 Google Play 商店,或者您想為新應用程式選擇應用程式簽署金鑰,而非由 Google 產生,請按照下列步驟操作:

  1. 使用應用程式的「簽署金鑰」簽署應用程式,並選取加密及匯出簽署金鑰的選項。

  2. 上傳應用程式的簽署金鑰到 Play 應用程式簽署功能。

  3. (建議) 產生並註冊上傳憑證,以便日後更新應用程式

  4. 將應用程式上傳到 Google Play

  5. 準備及推出應用程式版本

此外,本頁也會說明如何管理您的金鑰,以便在將應用程式上傳至其他應用程式商店時使用。如果您未使用 Android Studio,或希望透過指令列簽署應用程式,請參閱 apksigner 的使用方式。


Play App Signing

With Play App Signing, Google manages and protects your app's signing key for you and uses it to sign your APKs for distribution. And, because app bundles defer building and signing APKs to the Google Play Store, you need to configure Play App Signing before you upload your app bundle. Doing so lets you benefit from the following:

  • Use the Android App Bundle and support Google Play’s advanced delivery modes. The Android App Bundle makes your app much smaller, your releases simpler, and makes it possible to use feature modules and offer instant experiences.

  • Increase the security of your signing key, and make it possible to use a separate upload key to sign the app bundle you upload to Google Play.

  • One time key upgrade for new installs lets you change your app signing key in case your existing one is compromised or if you need to migrate to a cryptographically stronger key

Play 應用程式簽署

只要您使用 Play 應用程式簽署功能,Google 就會為您管理及保護應用程式的簽署金鑰,並使用該金鑰簽署您要發布的 APK。此外,由於應用程式套件會延遲建立 Google Play 商店簽署及簽署 APK,因此您必須設定 Play 應用程式簽署功能,然後再上傳應用程式套件。這麼做的好處如下:

  • 使用 Android App Bundle,並支援 Google Play 的進階傳送模式。 除了採用 Android App Bundle 外,開發人員也能縮減應用程式發布速度,並輕鬆使用功能模組及提供免安裝體驗。

  • 提高簽署金鑰的安全性,並利用單獨的上傳金鑰簽署您上傳至 Google Play 的應用程式套件。

  • 如果現有的金鑰遭駭,或是您必須遷移至加密強度更高的金鑰,可透過為新安裝檔提供的一次性金鑰升級來變更應用程式簽署金鑰。

注意:基於安全考量,如果您使用自動產生的金鑰或自行提供的金鑰設定 Play 應用程式簽署功能,就無法擷取應用程式簽署金鑰的副本,也無法在不刪除應用程式的情況下將金鑰從 Google 伺服器中刪除。

疑問:什麼是自動產生的金鑰?包括用cmd生成的嗎?

Play 應用程式簽署功能會使用到兩種金鑰:「應用程式簽署金鑰」和「上傳金鑰」。如要進一步瞭解詳情,請參閱「金鑰和 KeyStore」一節。您保留上傳金鑰,並使用金鑰簽署您的應用程式,以便上傳至 Google Play 商店。接著,Google 會使用上傳憑證驗證您的身分,並使用您的應用程式簽署金鑰簽署您的 APK 以進行發布,如圖 1 所示。如果使用單獨的上傳金鑰,您可以在金鑰遺失或遭駭時要求重設上傳金鑰

重要事項:如要在多個商店中使用相同的簽署金鑰,請務必在設定 Play 應用程式簽署功能時提供自己的簽署金鑰,而不是讓 Google 為您產生。

疑問:提供自己的簽署金鑰?



用cmd生成key store

在cmd內輸入:keytool,確認已安裝

在cmd內輸入:java -version,確認jdk已安裝,知道版本號

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keystore "C:\Users\meiyan\myKeyStore.jks"

path can be edited


C:\Users\ginyan>keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keystore "C:\Users\meiyan\myKeyStore.jks"
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  meiyan
What is the name of your organizational unit?
  [Unknown]:  meiyan
What is the name of your organization?
  [Unknown]:  meiyan
What is the name of your City or Locality?
  [Unknown]:  bangkok
What is the name of your State or Province?
  [Unknown]:  bangkok
What is the two-letter country code for this unit?
  [Unknown]:  th
Is CN=yan, OU=meiyan, O=meiyan, L=bangkok, ST=bangkok, C=th correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 90 days
        for: CN=yan, OU=meiyan, O=meiyan, L=bangkok, ST=bangkok, C=th
Enter key password for <alias_name>
        (RETURN if same as keystore password):
[Storing C:\Users\ginyan\myKeyStore.jks]

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore C:\Users\ginyan\myKeyStore.jks -destkeystore C:\Users\ginyan\myKeyStore.jks -deststoretype pkcs12".

Problem1:myKeyStore.jks cannot be recognized as the keystore file by VN maker what should I do?/ Problem2:Why the valid period is only 90 days?

如果遺失金鑰怎麼辦?

使用 Play 應用程式簽署功能時,如果上傳金鑰遺失或遭駭,您可以向 Google 要求撤銷舊的上傳金鑰,並產生新的金鑰。您的應用程式簽署金鑰受到 Google 的保護,因此即使變更上傳金鑰,您仍可繼續以原始應用程式更新的形式上傳新版應用程式。詳情請參閱重設遺失或遭駭的私人上傳金鑰


KeyStore、金鑰和憑證

Java KeyStore (.jks 或 .keystore) 是二進位檔案,用來當做憑證和私密金鑰的存放區。

公用金鑰憑證 (.der 或 .pem 檔案) 又稱為數位憑證或識別憑證,其中包含公開/私密金鑰組的公開金鑰,以及某些可辨識對應私密金鑰擁有者身分的中繼資料 (例如名稱和位置)。

以下是您應瞭解的各種金鑰類型:

  • 應用程式簽署金鑰:這個金鑰是用來簽署使用者裝置上安裝的 APK。簽署金鑰為 Android 安全更新模型的一部分,在應用程式的生命週期內會保持不變。應用程式簽署金鑰屬於私密金鑰,因此不得公開。不過,您可以將使用應用程式簽署金鑰產生的憑證分享給別人。

  • 上傳金鑰:在上傳應用程式套件或 APK 以透過 Google Play 簽署應用程式之前,您可以使用上傳金鑰簽署應用程式套件或 APK。請務必保留上傳金鑰的密鑰。不過,您可以分享使用上傳金鑰產生的憑證。產生上傳金鑰的方式如下:

  • 如果您在加入計畫時選擇讓 Google 為您產生應用程式簽署金鑰,系統就會將您簽署應用程式以進行發布時所使用的金鑰指定為上傳金鑰。

  • 如果您在將全新或現有應用程式加入計畫時向 Google 提供應用程式簽署金鑰,可以選擇在加入過程中或加入後產生新的上傳金鑰,以提升安全性。

  • 如果您選擇不產生新的上傳金鑰,可繼續將應用程式簽署金鑰當做上傳金鑰,用於簽署各個版本。

建議: 為了保障金鑰的安全,建議您確保應用程式簽署金鑰上傳金鑰不同的金鑰。
簽署應用程式以發布至 Google Play

當您準備好發布應用程式時,請先簽署應用程式並上傳到 Google Play。首次將應用程式發布到 Google Play 時,您必須一併設定 Play 應用程式簽署功能。本節說明如何妥善簽署應用程式以進行發布,並設定 Play 應用程式簽署功能。

產生上傳金鑰和 KeyStore

如果您沒有設定上傳金鑰 (適合設定 Play 應用程式簽署功能),則可使用 Android Studio 產生一個金鑰,如下所示:


Generate an upload key and keystore

If you don't already have an upload key, which is useful when configuring Play App Signing, you can generate one using Android Studio as follows:

  1. In the menu bar, click Build > Generate Signed Bundle/APK.

  2. In the Generate Signed Bundle or APK dialog, select Android App Bundle or APK and click Next.

  3. Below the field for Key store path, click Create new.

  4. On the New Key Store window, provide the following information for your keystore and key, as shown in figure 2. Figure 2. Create a new upload key and keystore in Android Studio.

  5. Keystore

  • Key store path: Select the location where your keystore should be created. Also, a file name should be added to the end of the location path with the .jks extension.

  • Password: Create and confirm a secure password for your keystore.

  1. Key

Alias: Enter an identifying name for your key.

  • Password: Create and confirm a secure password for your key. This should be the same as your keystore password. (Please refer to the known issue for more information)

  • Validity (years): Set the length of time in years that your key will be valid. Your key should be valid for at least 25 years, so you can sign app updates with the same key through the lifespan of your app.

  • Certificate: Enter some information about yourself for your certificate. This information is not displayed in your app, but is included in your certificate as part of the APK.

  1. Once you complete the form, click OK.

  2. If you would like to build and sign your app with your upload key, continue to the section about how to Sign your app with your upload key. If you only want to generate the key and keystore, click Cancel.

  3. 在選單列中,依序按一下「Build」>「Generate Signed Bundle/APK」。

  4. 在「Generate Signed Bundle or APK」對話方塊中,選取「Android App Bundle」或「APK」,然後按一下「Next」。

  5. 在「Key store path」欄位下方,按一下「Create new」。

  6. 在「New Key Store」視窗中,為您的 KeyStore 和金鑰提供以下資訊 (如圖 2 所示)。 圖 2. 在 Android Studio 中建立新的上傳金鑰和 KeyStore。

  7. 金鑰庫

  • 金鑰存放區路徑:選取建立 KeyStore 的位置。此外,如果副檔名為 .jks,則應在檔案名稱路徑的結尾加上檔案名稱。

  • 密碼:為金鑰庫建立並確認安全密碼。

  1. 金鑰

  • 別名: