Android簽名機制:產生keystore、簽名、查看簽名資訊

來源:互聯網
上載者:User

標籤:android   code   java   tar   ext   http   

Android專屬的安全機制,除了許可權機制外,另外一個就是簽名機制了。簽名機制主要用在以下兩個主要場合起到其作用:升級App和許可權檢查。

升級App

使用者在升級一款已經安裝過的App時,如果程式的修改來自於同一來源,則允許升級安裝,否則會提示簽名不一致無法安裝的提示。

許可權檢查

我曾在Android Permission許可權機制的具體使用一文中提過,對於申請許可權的  protection level 為 signature 或者 signatureOrSystem 的,會檢查許可權申請者和許可權聲明者的認證是否是一致的。

至於簽名機制的原理及其他作用,此不詳述,本文主要介紹,簽名檔案key的產生、用key去簽名apk檔案及查看簽名的方法。

產生keystore

建立keystore,需要用到keytool.exe (位於jdk_xx\jre\bin目錄下),具體做法如下:

 

(註:

///

Mac下jdk的安裝路徑

蘋果系統已經包含完整的J2SE,其中就有JDK和JVM(蘋果叫VM)。 
如果要在MAC系統下開發CODE。可以先裝個IDE(NETBEANS/Eclipse等),而後不需要裝JDK和JVM了,MAC下已經幫你下載好,安裝完成,配置好路徑。當然如果要升級JDK,那當然要自己下載安裝了。 

在MAC系統中,jdk的安裝路徑與windows不同,預設目錄是:/System/Libray/Frameworks/JavaVM.Framwork/。 
在這個目錄下有個Versions目錄,裡面有不同版本的jdk。

///

 

keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

#說明:

#    -genkey 產生密鑰

#    -alias demo.keystore 別名 demo.keystore

#    -keyalg RSA 使用RSA演算法對簽名加密

#    -validity 40000 有效期間限4000天

#    -keystore demo.keystore

///

(這裡需要注意,命令列下產生keystore的時候會有亂碼 參考以下文字:

首先,我們需要一個keystore,當然已經有了的話就不用這一步了:
cmd下:
進入到jdk的bin目錄,這樣的話,android.keystore檔案就會產生在這個目錄下,簽名的時候我們需要這個檔案
C:\Program Files\Java\jdk1.6.0_10\bin>keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore 
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什嗎?
  [Unknown]:  qiaoling您的組織單位名稱是什嗎?
  [Unknown]:  www.chinaandroid.com
您的組織名稱是什嗎?
  [Unknown]:  www.chinaandroid.com
您所在的城市或地區名稱是什嗎?
  [Unknown]:  haidian
您所在的州或省份名稱是什嗎?
  [Unknown]:  BJ
該單位的兩字母國家代碼是什麼
  [Unknown]:  86
CN=qiaoling, OU=www.chinaandroid.com, O=www.chinaandroid.com, L=haidian, ST=BJ, C=86 正確嗎?
  [否]:  Y
輸入<android.keystore>的主密碼(如果和 keystore 密碼相同,按斷行符號):

其中參數-validity為認證有效天數,這裡我們寫的大些10000天。還有在輸入密碼時沒有回顯(儘管輸就是啦) 並且 退格,tab等都屬於密碼內容,這個密碼在給.apk檔案簽名的時候需要.

 

然後簽名:
Eclipse中,右擊需要簽名的工程-->android tools-->export signed application package...
出現下面對話方塊,選擇需要簽名的工程

next,選擇上面產生的android.keystore檔案位置和設定的密碼

next

next,選擇簽名組建檔案的位置和名稱

finish,搞定啦...

///

 

對apk進行簽名

使用產生的keystore對apk簽名,使用到的是jarsigner.exe ,該工具位於jdk_xx\bin目錄下,命令如下:

 

jarsigner -verbose -keystore demo.keystore -signedjar test_signed.apk test.apk demo.keystore

#    test_signed.apk是簽名之後的檔案

#    test.apk是需要簽名的檔案

另外需要注意的是,如果你的jdk版本在1.7以上,你在對apk簽名時,需要加上這個參數:

1

-digestalg SHA1 -sigalg MD5withRSA

否則同樣會出現:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]的錯誤。

(註:

使用jarsigner給android_infoAssistant.apk 
檔案簽名,如下所示: 
E:\android_publish>"E:\jdk1.6\bin\jarsigner.exe" -verbose -keystore alex_android.keystore -signedjar android_assistant.apk assistant.apk alex_android.keystore 

輸入密匙的口令短語: 
...... (註:這裡是輸入密碼)
通過上面的命令就可以講未簽名的assistant.apk 檔案簽名為android_assistant.apk 

最後驗證是否簽名成功 
E:\android_publish>"E:\jdk1.6\bin\jarsigner.exe" -verify android_assistant.apk 
如果成功則 
輸出: 
jar 已驗證 )

 

 

查看簽名資訊

1、查看keystore的資訊

1

keytool -list -keystore demo.keystore -alias mykey -v

2、查看keystore的密鑰憑證資訊

1

keytool -list -keystore demo.keystore -alias mykey -rfc

(註:擷取Base64格式的密鑰憑證,RFC 1421)

3、查看apk的簽名資訊

1

jarsigner -verify -verbose -certs <your_apk_path.apk>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.