Android獨有的安全機制,除了權限機制外,另一個就是簽名機制了。簽名機制主要用在如下兩個主要場合起到其做用:升級App和權限檢查。 html
用戶在升級一款已經安裝過的App時,若是程序的修改來自於同一來源,則容許升級安裝,不然會提示簽名不一致沒法安裝的提示。 android
我曾在Android Permission權限機制的具體使用一文中提過,對於申請權限的 protection level 爲 signature 或者 signatureOrSystem 的,會檢查權限申請者和權限聲明者的證書是不是一致的。 算法
至於簽名機制的原理及其餘做用,此不詳述,本文主要介紹,簽名文件key的生成、用key去簽名apk文件及查看簽名的方法。 shell
建立keystore,須要用到keytool.exe (位於jdk_xx\jre\bin目錄下),具體作法以下: 安全
keytool -genkey -alias mykey -keyalg RSA -validity 40000 -keystore demo.keystore #說明: # -genkey 產生密鑰 # -alias mykey 別名 mykey # -keyalg RSA 使用RSA算法對簽名加密 # -validity 40000 有效期限4000天 # -keystore demo.keystore |
使用產生的keystore對apk簽名,使用到的是jarsigner.exe ,該工具位於jdk_xx\bin目錄下,命令以下: 工具
jarsigner -verbose -keystore demo.keystore -signedjar test_signed.apk test.apk mykey # test_signed.apk是簽名以後的文件 # test.apk是須要簽名的文件 |
另外須要注意的是,若是你的jdk版本在1.7以上,你在對apk簽名時,須要加上這個參數: post
-digestalg SHA1 -sigalg MD5withRSA |
不然一樣會出現:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]的錯誤。 加密
一、查看keystore的信息 spa
keytool -list -keystore demo.keystore -alias mykey -v |
二、查看keystore的公鑰證書信息 unix
keytool -list -keystore demo.keystore -alias mykey -rfc |
(注:獲取Base64格式的公鑰證書,RFC 1421)
三、查看apk的簽名信息
jarsigner -verify -verbose -certs <your_apk_path.apk> |