Apk 簽名的那些事

weixin_33936401發表於2018-11-27

Android不允許沒有簽名的apk安裝到手機上,應用的簽名類似於應用的身份證

簽名更大的作用是為了保護版權,如果應用的包名相同而簽名不一致,則無法覆蓋安裝,必須先解除安裝再安裝

建立一個簽名

6038844-c50864e6b568f235.jpg
6038844-6d526e84db065e1f.jpg
6038844-8153777ff95f0771.jpg

其中金鑰釋出組織單元金鑰釋出組織不一定要填寫,其他的要填寫

6038844-342a2716d9a4439c.png

為了拯救糾正症患者,在這裡附上簽名的示例

6038844-7854af934f4347f4.jpg

在 Gradle 中配置簽名

android {

    signingConfigs {
        release {
            keyAlias '金鑰別稱'
            keyPassword '金鑰密碼'
            storeFile file('E:/MySign.jks')
            storePassword '金鑰庫密碼'
        }

        debug {
            keyAlias '金鑰別稱'
            keyPassword '金鑰密碼'
            storeFile file('E:/MySign.jks')
            storePassword '金鑰庫密碼'
        }
    }

    buildTypes {
        release {
            // 正式環境簽名
            signingConfig signingConfigs.release
        }

        debug {
            // 開發環境簽名
            signingConfig signingConfigs.debug
        }
    }
}

這裡重點說一下 debug 簽名,如果沒有指定簽名則預設使用系統自動生成的 debug 簽名,每臺電腦生成的簽名檔案不會相同,因為我測試過用其他同事的手機覆蓋安裝應用,卻提示要先解除安裝後才能安裝

獲取簽名的 MD5、SHA1、SHA256 值

開啟 cmd 命令列,輸入以下指令:

keytool -list -v -keystore 簽名檔案地址

輸入密碼,在命令列視窗是看不到輸入的密碼,所以只管輸入之後回車即可

6038844-2f4be057747dbe6c.jpg

Android Debug的簽名檔案在以下的路徑,金鑰庫密碼為:android

C:\Users\電腦當前使用者名稱\.android\debug.keystore

驗證apk簽名

在 cmd 命令列中輸入

jarsigner -verify -verbose -certs apk檔案地址

正確的簽名,證書到期日期為約定有效期後的日期

  X.509, CN=HJQ, L=guangdong, ST=shantou, C=CN
  [證書的有效期為17-3-30 下午4:43至67-3-18 下午4:43]
  [CertPath 未驗證: Path does not chain with any of the trust anchors]

  s = 已驗證簽名
  m = 在清單中列出條目
  k = 在金鑰庫中至少找到了一個證書
  i = 在身份作用域內至少找到了一個證書

jar 已驗證。

警告:
此 jar 包含證書鏈未驗證的條目。
此 jar 包含的簽名沒有時間戳。如果沒有時間戳, 則在簽名者證書的到期日期 (2067-03-1
8) 或以後的任何撤銷日期之後, 使用者可能無法驗證此 jar。

debug簽名資訊,有效期大約為30年

  X.509, C=US, O=Android, CN=Android Debug
  [證書的有效期為16-11-22 下午6:15至46-11-15 下午6:15]
  [CertPath 未驗證: Path does not chain with any of the trust anchors]

  s = 已驗證簽名
  m = 在清單中列出條目
  k = 在金鑰庫中至少找到了一個證書
  i = 在身份作用域內至少找到了一個證書

jar 已驗證。

警告:
此 jar 包含證書鏈未驗證的條目。
此 jar 包含的簽名沒有時間戳。如果沒有時間戳, 則在簽名者證書的到期日期 (2046-11-1
5) 或以後的任何撤銷日期之後, 使用者可能無法驗證此 jar。

簽名不完整,未簽名或簽名錯誤

  s = 已驗證簽名
  m = 在清單中列出條目
  k = 在金鑰庫中至少找到了一個證書
  i = 在身份作用域內至少找到了一個證書

jar 未簽名。(缺少簽名或無法解析簽名)

手動簽名

可以用 360 提供的簽名工具進行簽名,可以到 360 官網進行下載或者 QQ群 78797078 中下載

6038844-2cf0af1a5287477b.png

相關文章