簡體   English   中英

驗證Android代碼簽名

[英]Verifying Android Code Signing

我們正在計划對CI設置進行一些更改,其中包括對用於簽名Android應用程序的密鑰庫進行一些更改(更改密碼,密鑰別名之類的東西)。

顯然,任何可能導致我們用錯誤的密鑰簽名的錯誤,如果將其推入商店,都將是一場災難。

所以我的問題是:

  1. 驗證用於簽名Android應用程序的密鑰的最佳方法是什么?
  2. 是否可以驗證兩個應用程序已使用同一密鑰簽名?
  3. Google Play開發者控制台是否已采取適當措施來檢測現有應用程序的密鑰更改?

我將以相反的順序執行此操作:

  1. Google Play開發者控制台是否已采取適當措施來檢測現有應用程序的密鑰更改?

是的,它確實。 實際上,一旦上傳了簽名的APK,您就只能提交使用該證書簽名的更新的APK。 否則,Google Play會吐出類似以下內容:

上傳失敗

您已將使用其他證書簽名的APK上傳到以前的APK。 您必須使用相同的證書。

您現有的APK已使用帶有指紋的證書進行了簽名:[SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96: 4F:84:DD:BA:33],並且用於簽署上傳的APK的證書具有指紋:[SHA1:20:26:F4:C1:DF:0F:2B:D9:46: 03:FF:AB:07:B1:28:7B:9C:75:44:CC]

  • =“已簽名”表示已使用非調試證書進行了簽名。

來源: apk必須使用與先前版本相同的證書簽名

  1. 是否可以驗證兩個應用程序已使用同一密鑰簽名?

是。 您可以為此使用jarsignerkeytool 我更喜歡后者的輸出:

keytool -list -printcert -jarfile MyApp.apk

在其他一些細節中,將為您提供證書的指紋(默認情況下為MD5,SHA1和SHA256),看起來像這樣:

Certificate fingerprints:
     MD5:  12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF
     SHA1: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:44
     SHA256: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:12:34:56:78:90:AB:CD:EF:12:34:56:78
     Signature algorithm name: SHA1withRSA
     Version: 3

您可以對多個APK執行此操作並比較結果。 另外,您也可以將APK中的指紋直接與密鑰庫中的證書進行比較:

keytool -list -keystore MyApp.keystore 

輸入密鑰庫的密碼后,您將看到類似以下內容的內容:

Certificate fingerprint (SHA1): 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:44

這應該與APK中的SHA1指紋完全匹配。

在上面鏈接的“問答” 的答案之一中,可以找到有關如何使用jarsigner進行類似操作的示例。

  1. 驗證用於簽名Android應用程序的密鑰的最佳方法是什么?

不確定是否可以客觀地回答這個問題,但是上述兩種方法都可以解決問題。 理想情況下,您需要設置一個腳本來自動執行此檢查(作為構建過程的一部分?),並在出現意外情況時盡早失敗。 最糟糕的情況是,您最終會得到一個APK,該APK上簽名的證書並不是您要簽署的。 如果此APK是對現有應用的更新,則Google Play會阻止您提交它。 如果它是全新的應用程序,則不會,並且必須使用相同(錯誤的)證書對它進行任何更新。

暫無
暫無

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

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