Android系統簽名簡介


apk的簽名,簡單說開發者可以通過簽名 對應用進行標識和更新。包名在一個設備上是唯一的,這樣可以避免被相同包名應用隨意覆蓋安裝。這是一個非常重要的安全功能。
系統中的簽名文件,也是對系統中應用進行簽名,編譯應用是可以指定簽名類型。

 

下面介紹的是Android系統中的簽名相關內容。

 

Android系統中的主要簽名文件

media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem。

 

Android系統中的簽名文件的路徑

build/target/product/security/目錄下。

 

編譯時簽名文件的配置

在Android.mk通過設置LOCAL_CERTIFICATE實現。如:LOCAL_CERTIFICATE := platform即選擇platform來簽名。
注:預置無源碼的apk應用時,很多時候仍然使用原本第三方簽名,LOCAL_CERTIFICATE := PRESIGNED。

 

.pk8和.x509.pem的區別

.pk8就是私鑰文件,用於對apk進行簽名。這個私鑰需要保密保存,不能公開。
.x509.pem是證書文件,相當於公鑰。這個可以公開,主要用於驗證某個apk是否由相應的私鑰簽名。

 

系統不同簽名文件的區別

簡介:

  • sharedUserId

每個apk或文件,系統都會分配屬於自己的統一的用戶ID(UID),創建沙箱保證其他應用的影響或影響其他應用。如:一般應用只能訪問自己包名下的文件(/data/data/pkgname),不能反問其他包名下的,其他應用也訪問不了自己包名下的文件。
sharedUserId,擁有同一user id的應用 之間就可以共享數據庫和文件,相互訪問。這些應用可以運行在同一進程,也可以運行不同進程。

  • sharedUserId與簽名文件

只有擁有相同sharedUserId標簽的,且擁有相同簽名的 應用才能分配相同的用戶ID,實現數據共享。如果僅僅擁有相同sharedUserId標簽,是無法確保安全的,也很容易被非法利用。

系統中5類簽名文件說明

  • platform:平台的核心應用簽名,簽名的apk是完成系統的核心功能。這些apk所在的進程UID是system。manifest節點中有添加android:sharedUserId="android.uid.system"。
  • media: 這個簽名的apk是media/download的一部分。manifest節點中有添加android:sharedUserId="android.media"。
  • shared:這個簽名的apk可以和home/contacts進程共享數據。manifest節點中有添加android:sharedUserId="android.uid.shared"。
  • testkey/releasekey:平台默認key。在編譯中未指定LOCAL_CERTIFICATE的,默認是用testkey。因為testkey是公開的,任何人都可以獲取,不安全,所以一般使用 自己創建releasekey作為默認key。

 

修改平台默認簽名

  • build/core/config.mk路徑下,修改下面變量為:

DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
或者使用宏控選擇。

  • system/sepolicy/private/keys.conf 和 system/sepolicy/prebuilts/api/{apilevel}/private/keys.conf下,修改:
-ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
+ENG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USER : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
  • build/core/core/Makefile下修改變量為:

BUILD_VERSION_TAGS = release-keys
或者使用宏控選擇。

 

平台簽名的創建

在工程目錄下執行下面命令就可以生成一套platform,shared,media,releasekey簽名文件:

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done


注:

  • 生成是用工程中的./development/tools/make_key腳本,依次生成
  • subject中參數的含義:

C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server's hostname)
emailAddress ---> Contact email address

  • 生成簽名文件過程,一般按回車,若輸入密碼后面簽名apk需要手動輸入。

 

查看簽名apk的簽名信息

keytool -printcert -jarfile xxx.apk
使用這個命令能夠查看apk所使用簽名的相關信息,如下圖所示

 

使用系統簽名文件直接給apk簽名

java -Djava.library.path=. -jar signapk.jar xxx.x509.pem xxx.pk8 beforesign.apk aftersign.apk
如下示例,
將app-debug.apk使用releasekey簽名,簽名后的apk名字為app-debug_release.apk。
注意路徑,如 signapk.jar路徑在out/host/linux-x86/framework/signapk.jar,可以拷貝出來。平台簽名文件路徑上面已經講過。如果出現報錯,多注意下提示,調整即可。
java -Djava.library.path=. -jar signapk.jar releasekey.x509.pem releasekey.pk8 app-debug.apk app-debug_release.apk

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM