如要使用 Play 應用程式簽署功能,您必須是帳戶擁有者,或是有權發布正式版、排除特定裝置及使用這項功能的使用者,且須接受《Play 應用程式簽署服務條款》。
運作方式
使用 Play 應用程式簽署功能時,您的金鑰會存放在 Google 用來儲存自身金鑰的安全基礎架構中,受到 Google 金鑰管理服務的保護。如要進一步瞭解 Google 的基礎架構,請參閱《Google Cloud 安全性白皮書》。
Android 應用程式會以私密金鑰簽署。為了確保應用程式更新值得信任,每組私密金鑰都有相關聯的公用憑證,讓裝置和服務驗證應用程式更新是否來自相同來源。更新檔的簽名必須和安裝版應用程式的簽名相同,裝置才會接受更新。如果讓 Google 來管理您的應用程式簽署金鑰,這個驗證程序會更加安全。
注意:對於在 2021 年 8 月之前建立的應用程式,您還是可以上傳 APK 並自行管理金鑰,既不必使用 Play 應用程式簽署功能,也不必採用 Android App Bundle 格式發布應用程式。但在這種情況下,如果 KeyStore 遺失或遭到盜用,您將無法更新應用程式,必須改用新的套件名稱重新發布應用程式。有鑑於此,Play 會建議開發人員為這些應用程式採用 Play 應用程式簽署功能,並且改用應用程式套件。
金鑰、簽署標的及工具的說明字詞 | 說明 |
---|---|
應用程式簽署金鑰 |
Google Play 會使用這組金鑰簽署要發布至使用者裝置的 APK。使用 Play 應用程式簽署功能時,您可以選擇上傳現有的應用程式簽署金鑰,或是讓 Google 為您產生金鑰。 請勿將應用程式簽署金鑰告知他人;應用程式的公用憑證則可分享給其他人。 |
上傳金鑰 |
您需要先使用這組金鑰簽署應用程式套件,再將應用程式套件上傳至 Google Play。請勿將上傳金鑰告知他人;應用程式的公用憑證則可分享給其他人。基於安全,應用程式簽署金鑰和上傳金鑰最好不一樣。 如要產生上傳金鑰,可採用以下兩種方式:
|
憑證 (.der 或 .pem ) |
憑證包含一組公開金鑰以及與金鑰擁有者相關的額外識別資訊。公用金鑰憑證可讓任何人驗證應用程式套件或 APK 簽署者的身分。您可以將公用金鑰憑證分享給任何人,因為其中並不包含您的私密金鑰。 如要向 API 供應商註冊您的金鑰,您可以前往 Play 管理中心的「Play 應用程式簽署」頁面 (依序點選「 測試及發布 」>「設定」>「應用程式簽署」) 下載應用程式簽署金鑰和上傳金鑰的公用憑證。公用金鑰憑證可以分享給任何人,因為其中並不包含您的私密金鑰。 |
憑證指紋 |
憑證的簡短唯一表示法;API 供應商經常會在應用程式註冊使用他們的服務時,要求提供憑證指紋及套件名稱。 您可以在 Play 管理中心的「Play 應用程式簽署」頁面 (依序點選「測試及發布 」>「設定」>「應用程式簽署」),找到上傳憑證和應用程式簽署憑證的 MD5、SHA-1 和 SHA-256 指紋。此外,從這個頁面下載原始憑證 (.der ) 也可以計算出其他指紋。 |
Java Keystore (.jks 或 .keystore ) |
安全性憑證及私密金鑰的存放區。 |
Play 加密私密金鑰 (PEPK) 工具 |
您可以使用這項工具從 Java Keystore 匯出私密金鑰,然後對這些金鑰進行加密,再轉移至 Google Play。 將應用程式簽署金鑰提供給 Google 使用時,請選取匯出及上傳金鑰的選項 (如有需要,另請選取公用憑證選項),然後按照操作說明下載及使用這項工具;您也可以下載、查看及使用 PEPK 工具的開放原始碼。 |
整個程序的運作流程如下:
設定及管理 Play 應用程式簽署功能
如果您的應用程式尚未使用 Play 應用程式簽署功能,請按照下方說明操作。
步驟 1:建立上傳金鑰
- 按照操作說明建立上傳金鑰。
- 使用上傳金鑰簽署應用程式套件。
步驟 2:備妥版本
- 按照操作說明準備及推出版本。
- 選取測試群組後,「應用程式完整性」部分就會顯示應用程式的 Play 應用程式簽署狀態。
- 如要使用 Google 產生的應用程式簽署金鑰繼續作業,請上傳您的應用程式套件。您也可以選取「變更應用程式簽署金鑰」,然後使用下列選項:
- 使用 Google 產生的應用程式簽署金鑰:超過 90% 新應用程式都使用 Google 產生的應用程式簽署金鑰。使用 Google 產生的金鑰可以避免金鑰遺失或遭到盜用 (金鑰無法下載)。如果選擇這個選項,即可從應用程式套件探索工具下載利用 Google 產生的金鑰所簽署的發行 APK,並在其他管道發行這個 APK;您也可以針對在其他管道發行的 APK 使用不同金鑰。
- 使用其他應用程式簽署金鑰:選擇應用程式簽署金鑰後,您可以將同一組金鑰用於開發人員帳戶中的其他應用程式,或是在本機保留應用程式簽署金鑰的副本,讓相關作業更有彈性。舉例來說,您可能因為某些裝置已預先安裝您的應用程式,所以已經有確定的金鑰。如果將金鑰保留在 Google 伺服器以外的地方,萬一本機副本外洩,就可能增加風險。您可以參考下列選項,瞭解如何使用其他金鑰:
- 使用與這個開發人員帳戶中的其他應用程式相同的應用程式簽署金鑰
- 從 Java KeyStore 匯出並上傳金鑰
- 匯出並上傳金鑰 (不使用 Java KeyStore)
- 選擇不採用 Play 應用程式簽署功能 (除非您打算升級應用程式簽署金鑰以註冊使用 Play 應用程式簽署功能,否則請勿這麼做)。
- 依照其餘指示進行準備作業及推出版本。
注意:您必須接受《服務條款》並選擇加入應用程式簽署計畫,才能繼續操作。
步驟 3:向 API 供應商註冊您的應用程式簽署金鑰
如果您的應用程式使用了任何 API,您通常需要為 API 註冊應用程式簽署金鑰,以便使用憑證指紋進行驗證。尋找憑證的方法如下:
- 開啟 Play 管理中心,然後前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 捲動至「應用程式簽署金鑰憑證」部分,然後複製您應用程式簽署憑證的指紋 (MD5、SHA-1 及 SHA-256)。
- 如果 API 供應商需要不同類型的指紋,您也可以下載
.der
格式的原始憑證,然後使用 API 供應商要求的轉換工具來轉換這個憑證的格式。
- 如果 API 供應商需要不同類型的指紋,您也可以下載
當您使用 Google 產生的金鑰,Google 會自動產生 4096 位元的加密高強度 RSA 金鑰。如果您選擇自行上傳應用程式簽署金鑰,則必須使用 2048 位元以上的 RSA 金鑰。
步驟 1:設定 Play 應用程式簽署功能
- 開啟 Play 管理中心,然後前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 如果您尚未接受《Play 應用程式簽署服務條款》,請詳閱條款內容並選取「接受」。
步驟 2:將原始金鑰的副本傳送給 Google 並建立上傳金鑰
- 找出您的原始應用程式簽署金鑰。
- 開啟 Play 管理中心,然後前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 選取最適合您發布流程的匯出及上傳選項,然後上傳您現有的應用程式簽署金鑰。
步驟 3:建立上傳金鑰 (建議選用此步驟)
- 建立上傳金鑰,然後將憑證上傳至 Google Play。
- 您也可以繼續將應用程式簽署金鑰當做上傳金鑰使用。
- 複製您應用程式簽署憑證的指紋 (MD5、SHA-1 及 SHA-256)。
- 為了進行測試,您可能需要使用此憑證的指紋向 API 供應商註冊上傳金鑰的憑證,以及註冊應用程式簽署金鑰。
步驟 4:使用上傳金鑰簽署後續的應用程式更新
發布應用程式更新時,請務必使用上傳金鑰簽署更新檔。
- 如果您先前未產生新的上傳金鑰:繼續使用原始應用程式簽署金鑰簽署應用程式套件,然後將應用程式套件上傳至 Google Play。如果遺失原始應用程式簽署金鑰,可以產生新的上傳金鑰,再向 Google 註冊該金鑰,以便繼續更新應用程式。
- 如果您已產生新的上傳金鑰:使用新的上傳金鑰簽署應用程式套件,然後將應用程式套件上傳至 Google Play。Google 會使用上傳金鑰驗證您的身分。如果您遺失了上傳金鑰,請與支援團隊聯絡以重設金鑰。
如果您無法提供現有金鑰,就可能需要選擇升級應用程式簽署金鑰以進行註冊。但在執行作業前,請注意下列事項:
- 這種做法需要雙重發布。
- 您必須在每個版本中上傳應用程式套件和舊版金鑰簽署的 APK。對於搭載 Android R* (API 級別 30) 以上版本的裝置,Google Play 會利用您的應用程式套件產生使用新版金鑰簽署的 APK。您的舊版 APK 則會用於較舊的 Android 版本 (API 級別 29 以下)。
*如果您的應用程式使用了 sharedUserId
,建議您針對搭載 Android T (API 級別 33) 以上版本的裝置,提供採用升級金鑰的安裝檔和更新檔。如要進行這項設定,請在應用程式套件配置中設定正確的 SDK 版本下限。
步驟 1:上傳新版金鑰並產生及上傳輪替證明
為了讓新版金鑰取得 Android 裝置信任,請務必從存放區上傳新的簽署金鑰,然後產生並上傳輪替證明:
- 開啟 Play 管理中心,然後前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 點選「應用程式簽署」分頁標籤。
- 按一下「顯示進階選項」,然後選取「使用新的應用程式簽署金鑰 (需要兩個發布中的版本)」。
- 選擇使用與開發人員帳戶中的其他應用程式相同的應用程式簽署金鑰,或是從 Android Studio、Java KeyStore 或其他存放區上傳新的應用程式簽署金鑰。
- 按照畫面上的指示下載並執行 PEPK 工具。
- ZIP 檔案準備就緒後,請按一下「上傳事先產生的 ZIP 檔案」,然後將 ZIP 檔案上傳至 Play 管理中心。
- 在「5. 透過上傳輪替證明,允許在 Android 裝置上信任新的金鑰」旁邊,按一下「顯示操作說明」。
- 下載 APKSigner 並執行以下指令,產生輪替證明:
$ apksigner rotate --out /path/to/new/file --old-signer --ks old-signer-jks --set-rollback true --new-signer --ks new-signer-jks --set-rollback true
- 按一下「上傳產生的輪替證明檔案」,然後上傳您在步驟 8 中產生的輪替證明。
- 按一下「儲存」。
建立上傳金鑰及更新 KeyStore
為了提升安全性,建議您使用新的上傳金鑰來簽署應用程式,不要使用應用程式簽署金鑰。
您可以在選擇採用 Play 應用程式簽署功能時建立上傳金鑰,或是日後再前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」) 建立上傳金鑰。建立上傳金鑰的方法如下:
- 按照 Android 開發人員網站的說明操作,將您的金鑰存放在安全的地方。
- 為新的上傳金鑰匯出憑證 (PEM 格式)。接著,替換下列以底線標示的引數:
$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
-
發布過程中如果出現要求註冊的提示,請上傳您的憑證,並向 Google 進行註冊。
如果您使用上傳金鑰:
- 上傳金鑰只會在 Google 註冊,目的是用來驗證應用程式作者的身分。
- 系統會先從您上傳的 APK 中移除您的簽名,再將 APK 提供給使用者。
- 必須為 2048 位元以上的 RSA 金鑰。
建立上傳金鑰後,請檢查下列位置並進行更新:
- 本機電腦
- 鎖定的內部部署伺服器 (變動式 ACL)
- 雲端代管系統 (變動式 ACL)
- 專屬機密管理服務
- (Git) 存放區
升級應用程式簽署金鑰
在某些情況下,您可以要求升級應用程式簽署金鑰。
要求升級應用程式簽署金鑰的常見原因如下:
- 您需要使用經過更嚴格加密的金鑰。
- 您的應用程式簽署金鑰遭到盜用。
重要事項:金鑰升級功能只支援使用應用程式套件的應用程式。
透過 Play 管理中心要求升級金鑰前,請先詳閱下方「提出金鑰升級要求前的重要注意事項」一節。您也可以接著展開下方其他章節,進一步瞭解如何要求升級金鑰。
提出金鑰升級要求前的重要注意事項注意:提出金鑰升級要求前,請先瞭解完成升級後可能須進行哪些變更。
- 如果您使用相同的應用程式簽署金鑰來簽署多個應用程式,藉此在應用程式間共用資料或程式碼,就必須將應用程式更新為可同時辨識新舊版應用程式簽署金鑰憑證。在搭載 Android S (API 級別 32) 以下版本的裝置上,為了共用資料或程式碼,Android 平台只會辨識舊版應用程式簽署金鑰憑證。
- 如果您的應用程式使用 API,請先向 API 供應商註冊新舊版應用程式簽署金鑰的憑證,之後再發布更新檔,以確保 API 能繼續運作。如需取得憑證,請前往 Play 管理中心的「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 如果您有使用者是透過點對點共用管道安裝更新檔,則他們只能安裝特定更新,這些更新與他們安裝的應用程式版本必須使用相同的簽署金鑰。如果他們因應用程式版本所用的簽署金鑰不同,導致無法更新應用程式,則可選擇解除安裝應用程式並重新安裝,以便取得更新檔。
對於 Android N (API 級別 24) 以上版本的所有安裝檔,每個應用程式每年可以要求升級應用程式簽署金鑰一次。
如果您成功要求升級金鑰,系統就會使用新的金鑰簽署所有安裝檔和應用程式更新檔。在搭載 Android T (API 級別 33) 以上版本的裝置上,Android 平台則會強制使用升級金鑰。在搭載 Android S (API 級別 32) 以下版本的裝置上,Android 平台不會強制使用此升級金鑰,仍會將舊版簽署金鑰視為應用程式的簽署金鑰。這也包括需要應用程式簽署金鑰的所有 Android 平台功能 (例如自訂權限共用功能)。在搭載 Android N (API 級別 24) 至 Android S (API 級別 32) 的裝置上,Google Play 安全防護會檢查應用程式更新是否已透過升級金鑰簽署,除非使用者關閉這項設定。Android 平台不會在搭載 Android S (API 級別 32) 以下版本的裝置上強制使用升級金鑰,因此上述檢查機制會提供額外的驗證措施。
- 開啟 Play 管理中心,然後前往「Play 應用程式簽署」頁面 (依序點選「
測試及發布
」>「設定」>「應用程式簽署」)。 - 在「升級應用程式簽署金鑰」資訊卡中,選取「要求升級金鑰」。
- 選取任一選項即可升級應用程式簽署金鑰,用於 Android N 以上版本的所有安裝檔。
- 讓 Google 產生新的應用程式簽署金鑰 (建議做法) 或上傳一組金鑰。
- 將應用程式簽署金鑰升級後,如果您使用的上傳金鑰和應用程式簽署金鑰是同一組金鑰,則可繼續將舊版應用程式簽署金鑰當做上傳金鑰使用,也可產生一組新的上傳金鑰。
- 選取要求升級應用程式簽署金鑰的原因。
- 如有需要,請向 API 供應商註冊新的應用程式簽署金鑰。
提示:如果您在多個發行管道發行應用程式,並希望為使用者盡量提高應用程式更新的相容性,則應該在每個發行管道升級金鑰。如要與 Google Play 金鑰升級相容,請使用 Android SDK Build Tools (修訂版本 33.0.1 以上) 隨附的 ApkSigner 工具:
$ apksigner sign --in ${INPUT_APK}
--out ${OUTPUT_APK}
--ks ${ORIGINAL_KEYSTORE}
--ks-key-alias ${ORIGINAL_KEY_ALIAS}
--next-signer --ks ${UPGRADED_KEYSTORE}
--ks-key-alias ${UPGRADED_KEY_ALIAS}
--lineage ${LINEAGE}
進一步瞭解應用程式更新的運作方式。
最佳做法
- 如果您同時也在 Google Play 以外的地方發行應用程式 (或是未來有這方面的計畫) 並想使用同一組簽署金鑰,有兩種方式可供選擇:
- 讓 Google 產生金鑰 (建議做法),然後從應用程式套件探索工具下載經過簽署的通用 APK,發行在 Google Play 以外的地方。
- 您也可以產生要用於所有應用程式商店的應用程式簽署金鑰,並在設定 Play 應用程式簽署功能時將金鑰副本傳送給 Google。
- 為了保護您的帳戶,請為所有能夠存取 Play 管理中心的帳戶啟用兩步驟驗證功能。
- 將應用程式套件發布至測試群組後,您可以前往應用程式套件探索工具存取 Google 從您應用程式套件所產生的可安裝 APK。您可以執行下列作業:
- 複製並分享內部應用程式分享連結;只要輕觸該連結,即可測試 Google Play 會在不同裝置上安裝應用程式套件的哪些內容。
- 下載經簽署的通用 APK。這個 APK 是以 Google 保存的應用程式簽署金鑰進行簽署,凡是應用程式支援的裝置皆可安裝。
- 下載含有特定裝置所有專屬 APK 的 ZIP 封存檔。這些 APK 是以 Google 保存的應用程式簽署金鑰進行簽署。您可以使用
adb install-multiple *.apk
指令,在裝置上安裝這個 ZIP 封存檔中的 APK。
- 為了提升安全性,請另外產生與應用程式簽署金鑰不同的上傳金鑰。
- 如果您使用了任何 Google API,建議您前往 Google Cloud 控制台,為您的應用程式註冊上傳金鑰和應用程式簽署金鑰憑證。
- 如果您使用的是 Android 應用程式連結,請務必更新網站上相應 Digital Asset Links JSON 檔案中的金鑰。
上傳金鑰遺失或遭到盜用?
如果私密上傳金鑰不慎遺失或遭到盜用,您可以建立新的金鑰,然後請開發人員帳戶擁有者在 Play 管理中心啟動金鑰重設程序。
Google 支援團隊註冊新的上傳金鑰後,帳戶擁有者和全域管理員就會在收件匣中收到訊息,以及一封含有更多資訊的電子郵件。接著,您就可以更新 KeyStore,並向 API 供應商註冊金鑰。
帳戶擁有者也可以在 Play 管理中心取消重設要求。
重要事項:重設上傳金鑰並不會影響 Google Play 在將 APK 提供給使用者前,用於重新簽署 APK 的應用程式簽署金鑰。
APK 簽署配置 v4
搭載 Android 11 以上版本的裝置均支援新的 APK 簽署配置 v4。Play 應用程式簽署功能會將 v4 簽署功能用於符合資格的應用程式,讓這些應用程式可以存取在新款裝置上推出的最佳化發行功能。開發人員無須對此採取任何因應措施,v4 簽署功能的使用者也不會受到影響。