使用 Google Play 應用程式簽署功能

應用程式簽署為 Android 應用程式提供了安全的更新機制。每個 Android 應用程式都會由開發人員或 Google Play 使用私密金鑰進行加密簽署;每組私密金鑰都有相關聯的公用憑證,可供裝置或服務驗證應用程式已使用來自信任來源的私密金鑰進行簽署。這種做法能確保所有應用程式更新值得信賴,因為只有在更新的簽名和已安裝應用程式的簽名相同的情況下,裝置才會接受更新。如要進一步瞭解 Android 裝置的應用程式簽署,請參閱簽署應用程式

您選擇加入 Google Play 應用程式簽署計劃後,Google 會為您管理及保護應用程式的簽署金鑰,並使用該金鑰簽署您要發佈的 APK。使用 Google Play 應用程式簽署功能的優點如下:

  • 可讓您使用 Android App Bundle,並受惠於 Google Play 的 Dynamic Delivery 機制。使用 Android App Bundle 可縮減應用程式的大小,讓發佈流程更簡單,還能支援動態功能及免安裝體驗。

  • 針對用於簽署應用程式 APK 的金鑰提供更高的安全保障,還能讓您使用獨立的上傳金鑰簽署上傳至 Google Play 的應用程式套件。如果您使用獨立的上傳金鑰,則在上傳金鑰遺失或遭到盜用時,可以要求重設金鑰;如果您在未加入 Google Play 應用程式簽署計劃的情況下,不幸遺失了應用程式簽署金鑰,將無法再對應用程式進行更新。

金鑰類型及定義

以下列出幾種您應該要認識的重要金鑰類型、成果及工具:

  • 應用程式簽署金鑰:Google Play 會使用這組金鑰簽署要發佈至使用者裝置的 APK。您加入 Google Play 應用程式簽署計劃後,可以上傳現有的應用程式簽署金鑰,或是選擇讓 Google Play 為您產生金鑰。根據 Android 的安全更新模型,在您應用程式的生命週期內,應用程式簽署金鑰皆無法變更。應用程式簽署金鑰不得公開,但您可以將這組應用程式簽署金鑰的公用憑證分享給任何人。

  • 上傳金鑰:將應用程式套件或 APK 上傳至 Google Play 前,您必須用這組金鑰進行簽署。上傳金鑰不得公開,但您可以將這組上傳金鑰的公用憑證分享給任何人。產生上傳金鑰的方式如下:

    • 如果您加入計劃時,選擇讓 Google 為您產生應用程式簽署金鑰,那麼系統會將您用於簽署第一個版本的金鑰指定為上傳金鑰。

    • 如果您為全新或現有應用程式註冊加入計劃時,已將應用程式簽署金鑰提供給 Google,那麼您可以在加入過程中或加入後產生新的上傳金鑰,以便提升安全性。

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

為了保障金鑰的安全,建議您確保應用程式簽署金鑰和上傳金鑰為不同的金鑰。
  • 憑證 (.der 或 .pem):憑證包含一組公開金鑰,以及一些與金鑰擁有者相關的額外識別資訊。公用金鑰憑證可讓任何人驗證應用程式套件或 APK 簽署者的身分。您可以從 Play 管理中心的「應用程式簽署」頁面下載您應用程式簽署金鑰和上傳金鑰的公用憑證,以便向 API 供應商註冊金鑰。公用金鑰憑證可以分享給任何人,其中並不包含您的私密金鑰。

  • 憑證指紋:憑證的簡短唯一表示法;API 供應商經常會在應用程式註冊使用他們的服務時,要求提供憑證指紋及套件名稱。您可以在 Play 管理中心的「應用程式簽署」頁面找到上傳金鑰和應用程式簽署憑證的 MD5、SHA-1 和 SHA-256 指紋;透過在此頁面中下載原始憑證 (.der),也可計算出其他指紋。

  • Java Keystore (.jks 或 .keystore):安全性憑證及私密金鑰的存放區。

  • Play Encrypt Private Key (PEPK) 工具:您可以使用這項工具從 Java Keystore 匯出私密金鑰,然後對要轉移至 Google Play 的私密金鑰進行加密。將應用程式簽署金鑰提供給 Google 使用時,請選取 [從 Java 金鑰庫匯出並上傳金鑰] 選項,然後按照操作說明下載及使用這項工具;或者您也可以選取 [匯出並上傳金鑰 (不使用 Java 金鑰庫)] 選項,以下載、查看及使用 PEPK 工具的開放原始碼。

權限和存取權

如果您是 Play 管理中心帳戶擁有者,或是具有「管理正式版」全域權限的使用者,可以選擇加入 Google Play 應用程式簽署計劃。每個開發人員帳戶都必須分別接受一次《服務條款》,接受條款後,您就能為個別應用程式註冊這項計劃。

接受《服務條款》不代表與您開發人員帳戶相關聯的所有應用程式都會自動註冊加入應用程式簽署計劃。

Google Play 應用程式簽署功能的運作方式

您開始使用 Google Play 應用程式簽署功能後,系統會將您的金鑰存放在基礎架構中;這套基礎架構與 Google 用來儲存自身金鑰的基礎架構完全相同。金鑰會受到 Google 金鑰管理服務的妥善保護。如想進一步瞭解 Google 的技術基礎架構,請參閱《Google Cloud 安全性白皮書》。

如果您想使用 Android App Bundle 發佈應用程式,請先註冊加入 Google Play 應用程式簽署計劃,之後才能上傳您的應用程式套件。

Google Play 應用程式簽署並非強制參加的計劃,如果您只想上傳 APK (而非應用程式套件),還是可以繼續自行管理金鑰。不過,在這種情況下,如果您遺失了金鑰庫,或認為金鑰庫遭到入侵,則您將無法更新應用程式,必須改用新的套件名稱重新發佈應用程式。

應用程式簽署程序如下:

  1. 簽署您的應用程式套件或 APK,然後將其上傳至 Play 管理中心。

  2. 下一個步驟視您上傳的內容而定:

    • 應用程式套件:Google 會從您的應用程式套件中產生最佳化 APK,並以應用程式簽署金鑰進行簽署。

    • 已用上傳金鑰簽署的 APK:Google 驗證您在 APK 上的簽名後,會移除該簽名,然後使用應用程式簽署金鑰重新簽署 APK。

    • 已用應用程式簽署金鑰簽署的 APK:Google 會驗證該簽名。

  3. Google 將已簽署的 APK 發佈給使用者。

您可以在選擇加入 Google Play 應用程式簽署計劃之前或之後,隨時上傳以原始應用程式簽署金鑰簽署的 APK。這種做法的一大好處,是可讓您直接在開放式、封閉式或內部測試群組中測試您的應用程式套件,同時您還能繼續在未加入 Google Play 應用程式簽署計劃的情況下,於正式版中發佈現有 APK。

為新應用程式選擇加入計劃

步驟 1:建立上傳金鑰

  1. 如要為新的應用程式建立上傳金鑰,請按照「簽署應用程式」一文的指示操作

  2. 使用上傳金鑰簽署您的新 APK。

步驟 2:進行準備作業與發佈版本

  1. 按照步驟進行準備作業與發佈版本

  2. 選擇測試群組後,在「由 Google 管理及保護您的應用程式簽署金鑰」部分設定應用程式簽署功能。

  3. 選取 [繼續] 讓 Google 管理您的應用程式簽署金鑰,或是選取 [進階選項],再為您的應用程式選擇最適合的選項。

  4. 為您的應用程式選擇最適合的應用程式簽署選項:

    • 如要讓 Google Play 產生金鑰並簽署您的應用程式,請選取 [繼續]。您用於簽署第一個版本的金鑰會變成您的「上傳金鑰」,請使用這組金鑰簽署日後的版本。

    • 如要使用和您開發人員帳戶中其他應用程式相同的金鑰,請依序選取 [進階選項] > [選項 2],然後選擇適當的應用程式。

    • 如要上傳現有的應用程式簽署金鑰,請依序選取 [進階選項] > [選項 2] 至 [選項 4],以選擇最適合您發佈流程的匯出及上傳選項。應用程式簽署金鑰上傳完畢後,您可以建立上傳金鑰或是繼續將應用程式簽署金鑰當做上傳金鑰使用。

如果您尚未接受《服務條款》,系統會要求您檢閱條款內容並選取 [接受],才能繼續操作。如果您目前選擇不加入應用程式簽署計劃,日後還是可以隨時按照下列操作說明,為現有應用程式註冊加入計劃。

步驟 3:向 API 供應商註冊您的應用程式簽署金鑰

如果您的應用程式使用了任何 API,您通常需要為 Google 簽署您的應用程式時所使用的金鑰憑證進行註冊程序,以便進行驗證。一般來說,這項程序會利用憑證指紋來進行。

如何找出 Google 在發佈之前用來重新簽署 APK 的金鑰憑證:

  1. 登入 Play 管理中心

  2. 選取應用程式。

  3. 在左側選單中依序選取 [版本管理] > [應用程式簽署]。

  4. 您可以在這個頁面中複製最常見的應用程式簽署憑證指紋 (MD5、SHA-1 和 SHA-256)。如果 API 供應商需要不同類型的指紋,您也可以下載 DER 格式的原始憑證,然後使用 API 供應商要求的轉換工具來執行這個憑證。

為現有應用程式選擇加入計劃

步驟 1:註冊加入 Google Play 應用程式簽署計劃

  1. 登入 Play 管理中心

  2. 選取應用程式。

  3. 在左側選單中依序選取 [版本管理] > [應用程式簽署]。

  4. 如有需要,請詳閱《服務條款》,然後選取 [接受]。

步驟 2:將原始金鑰傳送給 Google

如何將原始金鑰上傳至 Google Play 並建立上傳金鑰:

  1. 找出您的原始應用程式簽署金鑰。

  2. 登入 Play 管理中心

  3. 選取應用程式。

  4. 依序按一下左側選單中的 [版本管理] > [應用程式簽署]。

  5. 上傳現有的應用程式簽署金鑰。選取最適合您發佈流程的匯出及上傳選項。

步驟 3:建立上傳金鑰 (建議)

  1. 建立上傳金鑰,然後將憑證上傳至 Google Play,或是繼續將應用程式簽署金鑰當做上傳金鑰使用。

  2. 在下一個畫面中,您會看到應用程式憑證的指紋。為了進行測試,除了註冊應用程式簽署金鑰外,您可能還需要使用此憑證的指紋向 API 供應商註冊上傳金鑰的憑證。

步驟 4:使用上傳金鑰簽署後續的應用程式更新

完成上述步驟後,您就必須使用上傳金鑰簽署現有應用程式的所有更新。

  • 如果您選擇不產生新的上傳金鑰,將各個版本上傳至 Google Play 前,請繼續使用原始應用程式簽署金鑰進行簽署。如果您不慎遺失了應用程式簽署金鑰,可以產生新的上傳金鑰,再向 Google 註冊該金鑰,以便繼續更新應用程式。

  • 如果您產生了新的上傳金鑰,則將各個版本上傳至 Google Play 前,請使用新的上傳金鑰進行簽署。Google 會檢查版本是否已使用上傳金鑰進行簽署,以驗證您的身分。如果您的上傳金鑰不幸遺失或遭到盜用,請與開發人員支援小組聯絡以重設金鑰

建立上傳金鑰

為了提升安全性,建議您以新的上傳金鑰 (而非應用程式簽署金鑰) 簽署應用程式及日後的版本。您可以在選擇加入 Google Play 應用程式簽署計劃時完成這個步驟,或是日後再依序前往 [版本管理] > [應用程式簽署] 開始使用上傳金鑰。

關於上傳金鑰

  • 上傳金鑰只會在 Google 註冊,目的是用來驗證應用程式作者的身分。

  • 系統會先從您上傳的 APK 中移除您的簽章,再將 APK 提供給使用者。

上傳金鑰的限制

  • 上傳金鑰必須為 2048 位元以上的 RSA 金鑰。

  • 系統不支援 DSA 金鑰、EC 金鑰或少於 2048 位元的 RSA 金鑰。

建立上傳金鑰

  1. 產生新的上傳金鑰並妥善存放。請按照這篇文章的操作說明產生新的上傳金鑰。

  2. 為新產生的上傳金鑰匯出 PEM 格式的憑證;請確認您已替換以底線標示的引數

$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem

  1. 上傳您的上傳金鑰憑證,並在系統顯示提示時向 Google 註冊該憑證。

更新金鑰庫

建立上傳金鑰後,請更新您的金鑰庫。舉例來說,建議您檢查下列位置:

  • 本機電腦

  • 鎖定的內部部署伺服器 (變動式 ACL)

  • 雲端代管系統 (變動式 ACL)

  • 專屬機密管理服務

  • (Git) 存放區

重設遺失或遭到盜用的私密上傳金鑰

如果您不幸遺失了私密上傳金鑰,或者私密金鑰遭到盜用,請建立新的金鑰並與 Google Play 支援小組聯絡,以便重設金鑰。

重設上傳金鑰對於 Google Play 向使用者發佈應用程式前用於重新簽署 APK 的應用程式簽署金鑰,並不會造成影響。

與我們的支援小組聯絡

我們的支援小組只接受由 Play 管理中心帳戶擁有者發出的金鑰重設要求。

如要聯絡我們,請由帳戶擁有者填寫這份表單。請記得附上 upload_certificate.pem 檔案。

新的上傳金鑰註冊完畢後,您會收到電子郵件,屆時您便可以按照上述步驟更新金鑰庫以及 API 供應商註冊資訊

提示和最佳做法

  • 如果您同時也在 Google Play 以外的商店發佈應用程式,或是預計日後要這麼做,可以產生想要用於所有應用程式商店的應用程式簽署金鑰,並在選擇加入 Google Play 應用程式簽署計劃時上傳該金鑰。

  • 為了保護您的開發人員帳戶,建議您為所有能夠存取 Play 管理中心的帳戶啟用兩步驟驗證功能

  • 將應用程式套件發佈至測試版或是正式版測試群組後,您可以前往應用程式套件探索工具,下載含有特定裝置所有專屬 APK 的 ZIP 封存檔;這些 APK 已透過應用程式簽署金鑰進行簽署。您可以使用 bundletool cmdline 公用程式在裝置上安裝 ZIP 封存檔裡所含的 APK。

  • 選擇加入 Google Play 應用程式簽署計劃後,為了提升安全性,請產生一組與應用程式簽署金鑰不同的新上傳金鑰。

  • 如果您的上傳金鑰不幸遺失或遭到盜用,請與 Google 聯絡以重設金鑰。

  • 如要對已使用上傳金鑰簽署的 APK 進行測試,您必須向任何以您的應用程式簽名進行驗證的服務或 API (例如 Google Maps API 或 Facebook SDK) 註冊您的上傳金鑰。如果您使用了任何 Google API,建議您前往 Google Cloud Console 為您的應用程式註冊上傳憑證。

這篇文章實用嗎?
我們應如何改進呢?