簡體   English   中英

APK 更新的簽名驗證實際上是怎樣的?

[英]How actually is verified signature on APK update?

我有一個 Android 應用程序。 我在 Google Play 上以 APK 的形式發布了這個應用。 該應用程序由我擁有的簽名密鑰簽名:

  • 私鑰:我們將其命名為 A - RSA 4096
  • 證書:我們將其命名為 C1 - 幾年前使用 SHA1 制作的

現在:我的目標是基於密鑰 A 創建一個新證書(我們將其命名為 C2),但摘要算法從 SHA1 更改為 SHA256。 我想通過使用 A+C2 簽名來發布應用程序的新版本。 我什至可以在 C2 上設置與 C1 相同的所有字段和有效時間。 只會更改摘要。

問題是 - 使用 A+C2 發布和簽名的應用程序更新是否會出現問題?

AFAIK 驗證應用程序的未更改源,足以驗證用於簽名的公鑰。 在我的例子中——C2 具有與 C1 相同的公鑰。

那么 APK 更新上的簽名驗證實際上是如何進行的呢? 檢查以下哪項:

  • 私鑰/公鑰? (如果你有私鑰,你可以獲得公鑰)
  • 證書?
  • 證書字段?
  • 還要別的嗎?

一些消息來源說相同的證書很重要:

有些人似乎說也許只有私鑰需要相同:

Android 平台在已安裝的 APK 和待安裝的 APK 之間逐字節比較證書。

因此,您不能從同一個密鑰創建新證書並期望更新是無縫的。

您可以選擇使用密鑰輪換,這已在 Android 9 中引入: https ://developer.android.com/about/versions/pie/android-9.0#apk-key-rotation

感謝您的所有評論/回答。 希望能在Android源碼中找到准確的答案,可以肯定。 但這是不可能的。

所以最后我做了一個測試——我創建了 C2 並用 C2 簽署了同一個應用程序。 不幸的是,當我嘗試安裝使用 C2 簽名的新版本時,Android 拒絕說該應用程序來自其他開發人員。

所以現在我們肯定知道了:

  • 使用相同的私鑰/公鑰是不夠的。
  • Android 希望發布者的整個證書完全相同。

所以現在我將重點放在其他人之前提到的 APK 密鑰輪換https://stackoverflow.com/a/74903402/1961303

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM