午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

android應(yīng)用程序的簽名(Signature)

 CevenCheng 2011-07-06

1.          為什么要簽名

1)         發(fā)送者的身份認(rèn)證
由于開發(fā)商可能通過使用相同的Package Name來混淆替換已經(jīng)安裝的程序,以此保證簽名不同的包不被替換

2)         保證信息傳輸?shù)耐暾?/span>
簽名對于包中的每個(gè)文件進(jìn)行處理,以此確保包中內(nèi)容不被替換

3)         防止交易中的抵賴發(fā)生,Market對軟件的要求

2.          簽名的說明

1)         所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會安裝一個(gè)沒有數(shù)字證書的應(yīng)用程序

2)         Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個(gè)權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證

3)         如果要正式發(fā)布一個(gè)Android應(yīng)用,必須使用一個(gè)合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布

4)         數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時(shí)候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能

5)         簽名后需使用zipalign優(yōu)化程序

6)         Android將數(shù)字證書用來標(biāo)識應(yīng)用程序的作者和在應(yīng)用程序之間建立信任關(guān)系,而不是用來決定最終用戶可以安裝哪些應(yīng)用程序

3.          簽名的方法

1)         eclipse插件方式簽名

a)          調(diào)試簽名
eclipse
插件默認(rèn)賦予程序一個(gè)DEBUG權(quán)限的簽名,此簽名的程序不能發(fā)布到market上,此簽名有效期為一年,如果過期則導(dǎo)致你無法生成apk文件,此時(shí)你只要刪除debug keystore即可,系統(tǒng)又會為你生成有效期為一年的新簽名

b)         開發(fā)者生成密鑰并簽名
右鍵點(diǎn)擊項(xiàng)目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package…,即可通過eclipse自定義證書并簽名

c)          開發(fā)者導(dǎo)出未簽名的包
右鍵點(diǎn)擊項(xiàng)目名,在菜單中選擇Android Tools,然后選擇Export Signed Application Package…,即可導(dǎo)出未簽名的包,之后可通過命令行方式簽名

2)         用命令行方式簽名
使用標(biāo)準(zhǔn)的java工具keytooljarsigner來生成證書和給程序簽名

a)          生成簽名
$ keytool -genkey -keystore keyfile -keyalg RSA -validity 10000 -alias yan
注:validity為天數(shù),keyfile為生成key存放的文件,yan為私鑰,RSA為指定的加密算法(可用RSADSA)

b)         apk文件簽名
$ jarsigner -verbose -keystore keyfile -signedjar signed.apk base.apk yan
注:keyfile為生成key存放的文件,signed.apk為簽名后的apk,base.apk    為未簽名的apk,yan為私鑰

c)          看某個(gè)apk是否經(jīng)過了簽名
$ jarsigner -verify my_application.apk

d)         優(yōu)化(簽名后需要做對齊優(yōu)化處理)
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

3)         在源碼中編譯的簽名

a)          使用源碼中的默認(rèn)簽名
在源碼中編譯一般都使用默認(rèn)簽名的,在某源碼目錄中用運(yùn)行
$ mm showcommands
能看到簽名命令
Android
提供了簽名的程序signapk.jar,用法如下:
$ signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar
*.x509.pem
x509格式公鑰,pk8為私鑰
build/target/product/security
目錄中有四組默認(rèn)簽名可選:testkey, platform, shared, media(具體見README.txt),應(yīng)用程序中Android.mk中有一個(gè)LOCAL_CERTIFICATE字段,由它指定用哪個(gè)key簽名,未指定的默認(rèn)用testkey.

b)         在源碼中自簽名
Android
提供了一個(gè)腳本mkkey.shbuild/target/product/security/mkkey.sh),用于生成密鑰,生成后在應(yīng)用程序中通過Android.mk中的LOCAL_CERTIFICATE字段指名用哪個(gè)簽名

c)          mkkey.sh介紹

                                       i.              生成公鑰
openssl genrsa -3 -out testkey.pem 2048
其中-3是算法的參數(shù),2048是密鑰長度,testkey.pem 是輸出的文件

                                      ii.              轉(zhuǎn)成x509格式(含作者有效期等)
openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj ‘/C=US/ST=California/L=MountainView/O=Android/OU=Android/CN=Android/emailAddress=android@

                                    iii.              生成私鑰
openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt
把的格式轉(zhuǎn)換成PKCS #8,這里指定了-nocryp,表示不加密,所以簽名時(shí)不用輸入密碼

4.          簽名的相關(guān)文件

1)         apk包中簽名相關(guān)的文件在META_INF目錄下
CERT.SF
:生成每個(gè)文件相對的密鑰
MANIFEST.MF
:數(shù)字簽名信息
xxx.SF
:這是 JAR 文件的簽名文件,占位符 xxx標(biāo)識了簽名者
xxx.DSA
:對輸出文件的簽名和公鑰

2)         相關(guān)源碼
development/tools/jarutils/src/com.anroid.jarutils/SignedJarBuilder.java
frameworks/base/services/java/com/android/server/PackageManagerService.java
frameworks/base/core/java/android/content/pm/PackageManager.java
frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java
dalvik/libcore/security/src/main/java/java/security/Sign*
build/target/product/security/platform.*
build/tools/signapk/*

5.          簽名的相關(guān)問題
一般在安裝時(shí)提示出錯(cuò):INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

1)         兩個(gè)應(yīng)用,名字相同,簽名不同

2)         升級時(shí)前一版本簽名,后一版本沒簽名

3)         升級時(shí)前一版本為DEBUG簽名,后一個(gè)為自定義簽名

4)         升級時(shí)前一版本為Android源碼中的簽名,后一個(gè)為DEBUG簽名或自定義簽名

5)         安裝未簽名的程序

6)         安裝升級已過有效期的程序

6.          相關(guān)工具

1)         查看某個(gè)x509證書的的有效日期
SignApk.java中打印出publicKey.getNotAfter()即可

7.          參考
http://developer./guide/publishing/app-signing.html
http://www./Newsdetail.asp?id=257565010
http://www.eoe/thread-23010-1-1.html
http://pepa./blog/250991

 

出處http://xy0811.spaces.

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多