啟用「Play 應用程式簽署」後,Google 會代為管理和保護應用程式的簽署密鑰,並在發佈時用來簽署產生自 App Bundle 的已優化 APK。「Play 應用程式簽署」將您的應用程式簽署密鑰儲存在 Google 的安全基礎架構中,並提供升級選項,以加強保安。
如要使用「Play 應用程式簽署」,您必須是帳戶擁有者或擁有發佈正式版本、排除裝置及使用「Play 應用程式簽署」權限的使用者,且須接受《Play 應用程式簽署服務條款》。
運作方式
使用「Google Play 應用程式簽署」時,您的密鑰會與 Google 的密鑰儲存在相同的安全基礎架構內,密鑰受 Google 的「密鑰管理服務」保護,您可以閱讀《Google 雲端安全白皮書》,進一步瞭解 Google 的基礎架構。
Android 應用程式會使用私密金鑰簽署。為確保應用程式更新可信,每個私密金鑰均連結一個公開憑證,讓裝置或服務可以驗證應用程式更新是否來自相同的來源。只有當裝置的簽署與已安裝應用程式的簽署相符時,裝置才會接受更新。透過 Google 管理您的應用程式簽署密鑰,可提升驗證程序的安全性。
注意:對於 2021 年 8 月前建立的應用程式,您仍可上載 APK 並管理自己的密鑰,以代替使用「Play 應用程式簽署」及使用 Android App Bundle 發佈。不過,在遺失 Keystore 或 Keystore 被盜用時,您必須以新的套件名稱發佈新的應用程式,才能發佈更新。發佈這些應用程式時,Play 建議使用「Play 應用程式簽署」及轉用 App Bundle。
密鑰、成品和工具的說明條款 | 說明 |
---|---|
應用程式簽署密鑰 |
Google Play 使用此密鑰簽署向使用者裝置發佈的 APK。使用「Play 應用程式簽署」時,可以上載現有的應用程式簽署密鑰,或由 Google Play 為您產生密鑰。 應用程式簽署密鑰必須保密,但您可以向他人提供應用程式的公開憑證。 |
上載密鑰 |
您使用此密鑰簽署 App Bundle,然後才上載至 Google Play。上載密鑰必須保密,但您可以向他人提供應用程式的公開憑證。基於安全理由,建議應用程式簽署密鑰與上載密鑰為兩組不同的密鑰。 產生上載密鑰的方式有兩種:
|
憑證 (.der 或 .pem ) |
憑證包含一個公開密鑰,以及一些有關密鑰擁有者的額外識別資料。公開密鑰認證允許任何人驗證 App Bundle 或 APK 的簽署者。由於憑證不包含您的私密金鑰,您可以向任何人提供。 如要向 API 供應商註冊密鑰,你可以從「Play 管理中心」的「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署]) 下載應用程式簽署密鑰和上載密鑰的公開憑證。公開密鑰認證可向任何人提供,因為當中並不包含您的私密金鑰。 |
憑證指紋 |
直接且獨一無二的憑證形式。API 供應商通常會在您註冊使用其服務時,要求您提供憑證指紋和套件名稱。 上載和應用程式簽署憑證的 MD5、SHA-1 和 SHA-256 指紋可以在「Play 管理中心」的「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署]) 上找到。此外,你也可以從同一頁面下載原始憑證 ( |
Java keystore (.jks 或 .keystore ) |
安全憑證和私密金鑰的存放區。 |
Play 加密私密金鑰 (PEPK) 工具 |
從 Java Keystore 匯出並加密私密金鑰的工具,以便傳送至 Google Play。 向 Google 提供應用程式簽署密鑰時,請選取匯出及上載密鑰 (如有需要,請另選公開憑證),然後按照指示下載及使用此工具。您亦可以下載、查看和使用 PEPK 工具的開放原始碼。 |
程序流程如下:
設定並管理「Play 應用程式簽署」
如果應用程式尚未使用「Play 應用程式簽署」,請按照下列指示操作。
步驟 1:建立上載密鑰
- 按照指示建立上載密鑰。
- 使用上載密鑰簽署 App Bundle。
步驟 2:準備發佈版本
- 按照指示準備和推出您的發佈版本。
- 選取發佈途徑後,「應用程式完整性」部分會顯示應用程式的「Play 應用程式簽署」狀態。
- 如要使用 Google 產生的應用程式簽署密鑰並繼續,請上載您的 App Bundle。您亦可以選取 [變更應用程式簽署密鑰] 來存取下列選項:
- 使用 Google 產生的應用程式簽署密鑰:超過 90% 新應用程式使用 Google 產生的應用程式簽署密鑰。使用 Google 產生的密鑰可避免遺失或被盜用 (密鑰不可下載)。如果您選擇這個選項,便可以從 App Bundle 探索工具下載以 Google 產生的密鑰簽署的發佈 APK,以便在其他發行渠道發佈,或改用其他密鑰簽署這些 APK。
- 使用不同的應用程式簽署密鑰:選擇應用程式簽署密鑰讓您使用與開發人員帳戶中其他應用程式相同的密鑰,或在本機保留應用程式簽署密鑰的副本,以提高靈活性。舉例來說,由於您的應用程式已預先安裝在部分裝置上,密鑰可能已經確定。如果本機副本曾經外洩,在 Google 伺服器以外保存密鑰副本的風險會增加。您可以透過下列選項使用不同密鑰:
- 使用與開發人員帳戶中其他應用程式相同的應用程式簽署密鑰
- 從 Java KeyStore 匯出並上載密鑰
- 匯出並上載密鑰 (不使用 Java KeyStore)。
- 退出「Play 應用程式簽署」(只在計劃升級應用程式簽署密鑰以登記「Play 應用程式簽署」時才應選擇這個選項)。
- 完成其餘指示,以準備和推出您的發佈版本。
請注意:您需要接受《服務條款》並選用「應用程式簽署」,才能繼續進行操作。
步驟 3:向 API 供應商註冊應用程式簽署密鑰
如果您的應用程式有使用 API,通常都需要使用憑證指紋向供應商註冊應用程式密鑰憑證,以作驗證用途。尋找憑證的方法如下:
- 開啟「Play 管理中心」並前往「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署])。
- 捲動至「應用程式簽署密鑰憑證」部分,然後複製應用程式簽署憑證的指紋 (MD5、SHA-1 及 SHA-256)。
- 如果 API 供應商要求使用其他指紋類型,您亦可以下載
.der
格式的原始憑證,並透過 API 供應商要求的轉換工具轉換憑證。
- 如果 API 供應商要求使用其他指紋類型,您亦可以下載
如果使用 Google 產生的密鑰,Google 會自動產生加密度強的 4,096 位元 RSA 密鑰。如果選擇上載自己的應用程式簽署密鑰,則必須是 2,048 位元或以上的 RSA 密鑰。
步驟 1:設定「Play 應用程式簽署」
- 開啟「Play 管理中心」並前往「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署])。
- 請細閱《Play 應用程式簽署服務條款》並選取 [接受] (如尚未接受)。
步驟 2:將原始密鑰的副本傳送給 Google 並建立上載密鑰
- 找出原始應用程式簽署密鑰。
- 開啟「Play 管理中心」並前往「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署])。
- 選取最適合發佈程序的匯出和上載選項,然後上載現有的應用程式簽署密鑰。
步驟 3:建立上載密鑰 (選用的建議步驟)
- 建立上載密鑰並將憑證上載至 Google Play。
- 您亦可繼續使用應用程式簽署密鑰作為上載密鑰。
- 複製應用程式簽署憑證的指紋 (MD5、SHA-1 及 SHA-256)。
- 基於測試目的,您可能需要使用憑證指紋和應用程式簽署密鑰向 API 供應商註冊上載密鑰的憑證。
步驟 4:使用上載密鑰簽署下一個應用程式更新
應用程式更新均需要使用上載密鑰簽署。
- 如果不產生新的上載密鑰:請繼續使用原始應用程式簽署密鑰簽署 App Bundle,然後才上載至 Google Play。如果遺失原始應用程式簽署密鑰,您可以產生新的上載密鑰,並向 Google 註冊,以繼續更新您的應用程式。
- 如已產生新的上載密鑰:請使用新的上載密鑰簽署 App Bundle,然後才上載至 Google Play。Google 使用上載密鑰驗證您的身分。萬一遺失上載密鑰,請聯絡支援團隊協助您重設密鑰。
如果無法分享現有的密鑰,可能無法執行操作。選擇升級應用程式簽署密鑰以進行登記前,請注意:
- 這個選項需要兩個發佈版本。
- 您將需要在每個發佈版本中上載 App Bundle 和舊版密鑰簽署的 APK。Google Play 會使用 App Bundle,為執行 Android R* (API 級別 30) 或以上版本的裝置產生新版密鑰簽署的 APK。舊版 APK 則用於較舊的 Android 發佈版本 (API 級別 29 以下)。
*如果應用程式使用 sharedUserId,建議為執行 Android T (API 級別 33) 或以上版本的裝置安裝和更新時套用密鑰升級。如要設定,請在套裝設定中設定準確的 SDK 最低版本。
第 1 步:上載新的密鑰,並產生及上載轉換證明
您必須從存放區上載新的簽署密鑰,並產生及上載轉換證明,才能允許在 Android 裝置上信任新密鑰:
- 開啟「Play 管理中心」並前往「Play 應用程式簽署」頁面 (按一下 [發佈版本] > [設定] > [應用程式簽署])。
- 選取「應用程式簽署」分頁。
- 按一下 [顯示進階選項],並選取 [使用新的應用程式簽署密鑰 (需要持續發佈兩個發佈版本)]。
- 選擇使用與開發人員帳戶中其他應用程式相同的應用程式簽署密鑰,或從 Android Studio、Java KeyStore 或其他存放區上載新的應用程式簽署密鑰。
- 按照螢幕指示下載及執行 PEPK 工具。
- 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 中移除您的簽名。
- 必須為 2,048 或以上位元的 RSA 密鑰。
建立上載密鑰後,請檢查以下位置並進行更新:
- 本機電腦
- 鎖定的網站伺服器 (各種 ACL)
- 雲端機器 (各種 ACL)
- 專用的機密資料管理服務
- (Git) 存放區
升級應用程式簽署密鑰
在某些情況下,您可以要求升級應用程式簽署密鑰。
以下是要求升級應用程式簽署密鑰的幾個原因:
- 您需要加密度更嚴格的密鑰。
- 你的應用程式簽署密鑰曾被盜用。
重要事項:系統只支援使用 App Bundle 的應用程式升級密鑰。
在「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 平台功能 (例如自訂權限共用)。除非使用者已停用有關功能,否則 Google Play Protect 會在運行 Android N (API 級別 24) 至 Android S (API 級別 32) 的裝置中,檢查應用程式更新是否使用已升級密鑰簽署。由於 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 產生密鑰 (建議),然後從 App Bundle 探索工具下載已簽署的通用 APK,以便在 Google Play 之外的地方發佈。
- 您還能產生用於所有應用程式商店的應用程式簽署密鑰,並在設定「Play 應用程式簽署」時將密鑰副本傳送至 Google。
- 為保護您的帳戶,請為所有可存取「Play 管理中心」的帳戶啟用兩步驗證。
- 將 App Bundle 發佈至發佈途徑後,您可以前往 App Bundle 探索工具存取 Google 從您 App Bundle 產生的可安裝 APK。您可以:
- 複製並分享內部應用程式共用連結,讓您輕按一下即可測試 Google Play 在不同裝置上會安裝哪些來自您的 App Bundle 的 APK。
- 下載已簽署的通用 APK。這個單一 APK 使用 Google 保存的應用程式簽署密鑰簽署,並可在您的應用程式支援的任何裝置上安裝。
- 下載含有特定裝置所有 APK 的 ZIP 封存檔案。這些 APK 使用 Google 保存的應用程式簽署密鑰簽署,你可以使用
adb install-multiple *.apk
指令在裝置上安裝 ZIP 封存檔案中的 APK。
- 為加強安全性,請產生與應用程式簽署密鑰不同的新上載密鑰。
- 如果您目前使用 Google API,則可以在 Google Cloud Console 為應用程式註冊上載密鑰和應用程式簽署密鑰憑證。
- 如果您目前使用 Android App Links,請務必更新您網站上對應的 Digital Asset Links JSON 檔案中的密鑰。
上載密鑰遺失或被盜用?
如果私密上載密鑰遺失或被盜用,您可以建立新的密鑰。然後,您的開發人員帳戶擁有者可以在「Play 管理中心」啟動密鑰重設。
我們的支援團隊註冊新的上載密鑰後,帳戶擁有者和全球管理員將透過收件箱訊息和電郵收到進一步的資料。然後,您便可更新 Keystore,並向 API 供應商註冊您的密鑰。
帳戶擁有者亦可在「Play 管理中心」取消重設要求。
重要:向使用者發佈 APK 前,Google Play 用來重新簽署的應用程式簽署密鑰,將不會受重設上載密鑰所影響。
APK 簽署配置 v4
Android 11 或以上的裝置支援新的 APK 簽署配置 v4。「Play 應用程式簽署」會在符合資格的應用程式中使用 v4 簽署,讓應用程式存取較新型號裝置上經優化的發行功能。開發人員無需採取任何行動,使用者亦預期不受 v4 簽署影響。