Android 中使用系統(tǒng)簽名的方法

Android 中使用系統(tǒng)簽名的方法

Android Build中系統(tǒng)簽名使用方法

Key的目錄

默認加密key是放在Android源碼的/build/target/product/security目錄下

其中,.pk8文件為私鑰,.x509.pem文件為公鑰

platform.x509.pem 探遵、platform.pk8 這兩個文件位置其實并不是固定的,在Android 平臺可以自定義路徑

export PRODUCT_DEFAULT_DEV_CERTIFICATE := vendor/xxxx/security/releasekey

Key的使用

Apk的Android.mk文件中會指定LOCAL_CERTIFICATE

LOCAL_CERTIFICATE := testkey # 普通APK料仗,默認情況下使用

LOCAL_CERTIFICATE := platform # 該APK完成一些系統(tǒng)的核心功能,這種方式編譯出來的APK所在進程的UID為system

LOCAL_CERTIFICATE := shared # 該APK是media/download系統(tǒng)中的一環(huán)

LOCAL_CERTIFICATE := media # 該APK是media/download系統(tǒng)testkey克蚂。

如果不指定,默認使用testkey规辱。

對應(yīng)的绿鸣,除了在Android.mk指定上述的值疚沐,還需要在APK源碼的AndroidManifest.xml文件的manifest節(jié)點里面申明權(quán)限:

android:sharedUserId="android.uid.system"

android:sharedUserId="android.uid.shared"

android:sharedUserId="android.media"

key的生成

在/build/target/product/security目錄下有個README,里面有說怎么制作這些key以及使用問題

For detailed information on key types and image signing, please see:

https://source.android.com/devices/tech/ota/sign_builds.html

The test keys in this directory are used in development only and should
NEVER be used to sign packages in publicly released images (as that would
open a major security hole).

key generation
--------------

The following commands were used to generate the test key pairs:

  development/tools/make_key testkey  '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key platform '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key shared   '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
  development/tools/make_key media    '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'

signing using the openssl commandline (for boot/system images)
--------------------------------------------------------------

1\. convert pk8 format key to pem format
   % openssl pkcs8 -inform DER -nocrypt -in testkey.pk8 -out testkey.pem

2\. create a signature using the pem format key
   % openssl dgst -binary -sha1 -sign testkey.pem FILE > FILE.sig

extracting public keys for embedding
------------------------------------

dumpkey.jar is a Java tool that takes an x.509 certificate in PEM format as
input and prints a C structure to standard output:

    $ java -jar out/host/linux-x86/framework/dumpkey.jar build/target/product/security/testkey.x509.pem
    {64,0xc926ad21,{1795090719,2141396315,950055447,2581568430,4268923165,1920809988,546586521,3498997798,1776797858,3740060814,1805317999,1429410244,129622599,1422441418,1783893377,1222374759,2563319927,323993566,28517732,609753416,1826472888,215237850,4261642700,4049082591,3228462402,774857746,154822455,2497198897,2758199418,3019015328,2794777644,87251430,2534927978,120774784,571297800,3695899472,2479925187,3811625450,3401832990,2394869647,3267246207,950095497,555058928,414729973,1136544882,3044590084,465547824,4058146728,2731796054,1689838846,3890756939,1048029507,895090649,247140249,178744550,3547885223,3165179243,109881576,3944604415,1044303212,3772373029,2985150306,3737520932,3599964420},{3437017481,3784475129,2800224972,3086222688,251333580,2131931323,512774938,325948880,2657486437,2102694287,3820568226,792812816,1026422502,2053275343,2800889200,3113586810,165549746,4273519969,4065247892,1902789247,772932719,3941848426,3652744109,216871947,3164400649,1942378755,3996765851,1055777370,964047799,629391717,2232744317,3910558992,191868569,2758883837,3682816752,2997714732,2702529250,3570700455,3776873832,3924067546,3555689545,2758825434,1323144535,61311905,1997411085,376844204,213777604,4077323584,9135381,1625809335,2804742137,2952293945,1117190829,4237312782,1825108855,3013147971,1111251351,2568837572,1684324211,2520978805,367251975,810756730,2353784344,1175080310}}

This is called by build/make/core/Makefile to incorporate the OTA signing keys
into the recovery image.

APK開發(fā)環(huán)境中系統(tǒng)簽名使用方法

AndroidManifest.xml中的android:sharedUserId="android.uid.system"潮模,代表的意思是和系統(tǒng)相同的uid濒旦,可以擁有修改系統(tǒng)時間,文件操作等權(quán)限再登。

使用命令行方式

java -jar signapk.jar platform.x509.pem platform.pk8 MyDemo.apk MyDemo_signed.apk 

platform.x509.pem

文件位置:platform/build/target/product/security/

platform.pk8

文件位置:platform/build/target/product/security/

signapk.jar

由源文件 /platform/build/tools/signapk/編譯產(chǎn)生

生成目錄 /out/host/linux-x86/framework/ 中找到

Android Studio方式

build.gradle中添加

    signingConfigs {
        release {
            //發(fā)布正式版本模式下的使用的簽名文件
            keyAliard 'android'
            keyPassword 'android'
            storeFile file('./platform.keystore')
            storePassword 'android'
        }
    }

關(guān)于 platform.keystore 生成有提供如下兩種方法

Linux 環(huán)境 keystore 生成

platform.pk8尔邓、platform.x509.pem轉(zhuǎn)成keystore類型的簽名文件

1、環(huán)境:Ubuntu

2锉矢、JDK配置

3梯嗽、下載keytool-importkeypair GitHub - getfatday/keytool-importkeypair: A shell script to import key/certificate pairs into an existing Java keystore

4、生成keystore簽名文件

將platform.pk8沽损、platform.x509.pem和keytool-importkeypair放到同一個文件夾下灯节,然后打開終端,執(zhí)行以下語句即可在文件夾下生成keystore簽名文件

./keytool -importkeypair -k name.keystore -p android -pk8 platform.pk8 \
    -cert platform.x509.pem -alias android

-k:生成的簽名文件名稱

-p:簽名文件密碼

-alias:簽名文件別名

Note:Android

Windows環(huán)境keystore 生成

1绵估、安裝OpenSSL炎疆,參考 Windows 下OpenSSL安裝過程及錯誤解決辦法_離水的魚兒的博客-CSDN博客_openssl

2、將platform.pk8国裳,platform.x509.pem 文件復(fù)制到openSSL安裝目錄形入,方便后面執(zhí)行命令

3、執(zhí)行文件目錄中的start.bat缝左,會打開命令窗

4亿遂、在本目錄下生成platform.pem文件浓若,目錄圖中的platform.pem文件此步驟后生成

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

5、在本目錄下生成platform.p12文件蛇数,并設(shè)置別名和密碼

openssl pkcs12 -export -in platform.x509.pem -out platform.p12 \
    -inkey platform.pem -password pass:android -name android

這里設(shè)置的別名和密碼就是在Android Studio打包時選擇的別名和密碼(這里都設(shè)置為android)挪钓,輸出 platform.p12文件

6.在本目錄下生成platform.jks文件

keytool -importkeystore -deststorepass android -destkeystore ./platform.jks \
    -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass android

更多原理性介紹可以看這兩篇文檔

Android v1、v2耳舅、v3簽名原理

android-security_介紹

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碌上,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浦徊,更是在濱河造成了極大的恐慌绍赛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辑畦,死亡現(xiàn)場離奇詭異,居然都是意外死亡腿倚,警方通過查閱死者的電腦和手機纯出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敷燎,“玉大人暂筝,你說我怎么就攤上這事∮补幔” “怎么了焕襟?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饭豹。 經(jīng)常有香客問我鸵赖,道長,這世上最難降的妖魔是什么拄衰? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上悦荒,老公的妹妹穿的比我還像新娘待秃。我一直安慰自己,他們只是感情好妖混,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布老赤。 她就那樣靜靜地躺著,像睡著了一般制市。 火紅的嫁衣襯著肌膚如雪抬旺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天祥楣,我揣著相機與錄音嚷狞,去河邊找鬼块促。 笑死,一個胖子當(dāng)著我的面吹牛床未,可吹牛的內(nèi)容都是我干的竭翠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼薇搁,長吁一口氣:“原來是場噩夢啊……” “哼斋扰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啃洋,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤传货,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宏娄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體问裕,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年孵坚,在試婚紗的時候發(fā)現(xiàn)自己被綠了粮宛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡卖宠,死狀恐怖巍杈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扛伍,我是刑警寧澤筷畦,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刺洒,受9級特大地震影響鳖宾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逆航,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一攘滩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纸泡,春花似錦漂问、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吧兔,卻和暖如春磷仰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背境蔼。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工灶平, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伺通,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓逢享,卻偏偏與公主長得像罐监,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞒爬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容