天天看點

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

目錄

  • 目錄
  • 概述
  • 數字簽名證書生成方法
    • 指令行工具keytooljarsinger
    • Android Studio
    •  小結
  • 檢視應用簽名資訊
    • 檢視自簽名證書的資訊
    • 檢視第三方應用或Android系統應用簽名證書資訊

概述

Android系統要求所有的應用必須被證書進行數字簽名之後才能進行安裝。android系統通過該證書來确認應用的作者,該證書是不需要權威機構認證的,一般情況下應用都是用開發者的自簽名證書,該證書是確定應用程式和應用程式作者之間建立信任關系,而不是用來決定使用者可以安裝哪些應用程式。

應用進行數字簽名的好處和注意事項如下:

  1. Android所有的應用程式必須要有數字證書簽名,Android系統不會安裝一個沒有數字證書簽名的程式。
  2. Android系統中,系統app使用的是平台證書簽名,而第三方app一般使用開發者的自簽名證書。
  3. Release版本的第三方app(例如淘寶、支付寶、微信),必須使用一個合适私鑰生成的數字證書來給程式進行簽名,并且保證每次的疊代新版本都是使用相同的證書進行數字簽名。不然的話,新版本和舊版本的數字證書不一緻,Android系統會認為這是兩個不同的app,導緻更新等操作失敗。
  4. 數字證書是存在有效期的,這也決定了app的預計生命周期,如果數字證書超期失效,則應用無法安裝或者無法正常更新。
  5. Android提供了基于簽名的權限機制,那麼一個應用程式就可以為另一個以相同證書簽名的應用程式公開自己的功能。以同一個證書對多個應用程式進行簽名,利用基于簽名的權限檢查,你就可以在應用程式間以安全的方式共享代碼和資料了。 不同的應用程式之間,想共享資料,或者共享代碼,那麼要讓他們運作在同一個程序中,而且要讓他們用相同的證書簽名。

數字簽名證書生成方法

聲明:實驗生成的keystore隻是作為示範使用,并沒有實際應用到項目中。大家參考時也要根據我的部落格手工修改部分參數,切忌無腦照抄!

Android是使用标準的Java工具keytool和jarsigner來生成數字證書,而目前市場上第三方IDE(Android Studio和Eclipse)都是通過圖形化系統幫我們封裝了這兩個工具的具體執行步驟。

接下來,我會介紹兩種生成數字簽名證書的方式,分别通過指令行和Android Studio進行生成。

指令行工具(keytool&&jarsinger)

由于Android的數字簽名證書是用java标準工具生成的(路徑為:$JAVA_HOME/bin目錄下),那我們當然可以在指令行生成數字證書了,具體方法如下。

  1. 使用keytool生成數字簽名證書。示例指令如下:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize  -validity            
  • 1
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

參數詳解:

  • -keystore : 指定生成數字簽名證書的檔案名和路徑。
  • -alias:指定證書的别名。
  • -keyalg:指定生成證書所需要的算法。
  • -keysize:指定證書大小。
  • -validity:指定證書的有效期,機關為天。

示例截圖如下:

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  1. 使用生成的keystore,利用jarsinger為應用進行簽名。示例指令如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name           
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

參數詳解:

  • -sigalg:簽名算法的名稱。
  • -digestalg:摘要算法的名稱。
  • -keystore : 指定簽名證書的位置。
  • alias_name:簽名證書的别名。

示例截圖如下:

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  1. google官方同時推薦使用zipalign工具對簽名的apk進行優化。該工具位于Android SDK的/build-tools/版本号/目錄下。示例指令如下:
zipalign -v  your_project_name-unaligned.apk your_project_name.apk           
  • 1
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  • 1

示例截圖如下:

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

Android Studio

使用指令行的方式可以顯得geek,并且讓我們更多的了解實作細節。但是,平時應用開發中更多的是注重效率,是以,我們可以采用目前google官方推薦的AS幫我們實作應用數字簽名功能。具體步驟如下。

  1. 選擇編譯Module->Build->Generate Signed APK->選擇編譯Module->Next。
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  1. 選擇Create new,建立一個新的數字簽名證書。
    Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  2. 填寫證書資訊。
    Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

填寫完成之後,我們點選OK,就可以生成我們的數字簽名證書了。

上述工作完成後,我們就生成了數字簽名證書,但是還沒有對我們的apk進行簽名。想要用生成的數字證書對apk進行簽名,還需要修改目前Module的build.gradle檔案,增加簽名指令,具體内容如下:

android {
    compileSdkVersion 
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "××××××"
        minSdkVersion 
        targetSdkVersion 
    }

    signingConfigs {
        debug {
            // 配置debug版本的數字簽名證書
            storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
            storePassword "123456"
            keyAlias "release-key"
            keyPassword "123456"
        }
        release {
            // 配置release版本的數字簽名證書(為了友善,這裡的release版本和debug版本共用一個數字簽名證書)
            storeFile file("/home/wzy/Documents/keystore/simple-weather.jks")
            storePassword "123456"
            keyAlias "release-key"
            keyPassword "123456"
        }
    }

    buildTypes {
        release {
            // 配置release版本的數字簽名
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            // 配置debug版本的數字簽名
            signingConfig signingConfigs.debug
        }
    }
    lintOptions {
        abortOnError false
    }
}           
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

當然,上述指令Android Studio也提供了圖形化界面進行操作,可以直接在Module Settings進行設定,截圖如下(ps:我還是喜歡手動配置)。

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

 小結

Android應用可以在debug和release兩種模式下進行數字證書簽名。在Android Studio中,我們直接點選Run使用的是debug模式,我們在指令行敲擊

bash gradle :$module_name:build

使用的是release模式。

debug模式下簽名是為了開發調試,release模式下進行簽名則是為了正式釋出。

Android SDK提供了一個不需要密碼的證書用于在debug模式下進行簽名調試,預設存儲在$HOME/.android/debug.keystore,但是release版本必須使用自己的數字簽名證書。

檢視應用簽名資訊

首先,為什麼我們需要檢視應用簽名資訊呢?

是因為,很多第三方提供的SDK服務為了區分應用必須讓我們提供數字簽名的SHA1值,例如百度地圖定位SDK、高德地圖定位SDK,為了使用這些服務,我們就必須學會如何檢視應用簽名資訊。

檢視自簽名證書的資訊

我們自簽名的證書,由于keystore檔案存在于我們可通路的路徑下,我們可以直接通過keytool指令去檢視證書資訊。

示例指令如下:

keytool -v -list -keystore  my-release-key.keystore           
  • 1
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  • 1

輸入指令後,是需要輸入簽名密碼的。

參數詳解:

  • -list:列出密鑰庫中的條目。
  • -keystore:數字證書位置。

示例截圖如下:

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

檢視第三方應用或Android系統應用簽名證書資訊

其實系統應用對開發者來說也是第三方應用,但是隻要我們能拿到它的apk,就能知道它的應用簽名資訊。以我目前使用的樂運動apk為例(com.oxygen.www_3.0_40.apk)。

  1. 用unzip指令解壓apk。
unzip com.oxygen.www_3._40.apk           
  • 1
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  • 1
  1. 進入META-INF檔案,找到其中的CERT.RSA檔案。
  2. 使用keytool工具進行資訊檢視,具體指令如下:
keytool -printcert -file CERT.RSA           
  • 1
Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊
  • 1

參數詳解:

  • -printcert:列印證書内容

示例截圖如下:

Android apk簽名目錄概述數字簽名證書生成方法檢視應用簽名資訊

繼續閱讀