<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 189,comments - 115,trackbacks - 0

    Android簽名機(jī)制



    Android簽名機(jī)制可劃分為兩部分:(1)ROM簽名機(jī)制;(2)第三方APK簽名機(jī)制。

    Android APK實(shí)際上是一個(gè)jar包,而jar包又是一個(gè)zip包。APK包的簽名實(shí)際上使用的是jar包的簽名機(jī)制:在zip中添加一個(gè)META的子目錄,其中存放簽名信息;而簽名方法是為zip包中的每個(gè)文件計(jì)算其HASH值,得到簽名文件(*.sf),然后對(duì)簽名文件(.sf)進(jìn)行簽名并把簽名保存在簽名塊文件(*.dsa)中。

    ROM簽名機(jī)制

    在編譯Android源碼生成ROM的過(guò)程中,會(huì)使用build/target/product/security目錄中的4個(gè)key(media, platform, shared, testkey)來(lái)對(duì)apk進(jìn)行簽名。其中,*.pk8是二進(jìn)制形式(DER)的私鑰,*.x509.pem是對(duì)應(yīng)的X509公鑰證書(BASE64編碼)。build/target/product/security目錄中的這幾個(gè)默認(rèn)key是沒(méi)有密碼保護(hù)的,只能用于debug版本的ROM。

    要生成Release版本的ROM,可先生成TargetFiles,再使用帶密碼的key對(duì)TargetFiles重新簽名,最后由重簽名的TargetFiles來(lái)生成最終的ROM。

    可以使用Android源碼樹中自帶的工具“development/tools/make_key”來(lái)生成帶密碼的RSA公私鑰對(duì)(實(shí)際上是通過(guò)openssl來(lái)生成的):
    $ development/tools/make_key media ‘/C=CN/ST=Sichuan/L=Chengdu/O=MyOrg/OU=MyDepartment/CN=MyName’
    上面的命令將生成一個(gè)二進(jìn)制形式(DER)的私鑰文件“media.pk8”和一個(gè)對(duì)應(yīng)的X509公鑰證書文件“media.x509.pem”。其中,/C表示“Country Code”,/ST表示“State or Province”,/L表示“City or Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表示“Name”。前面的命令生成的RSA公鑰的e值為3,可以修改development/tools/make_key腳本來(lái)使用F4 (0×10001)作為e值(openssl genrsa的-3參數(shù)改為-f4)。

    也可以使用JDK中的keytool來(lái)生成公私鑰對(duì),第三方APK簽名一般都是通過(guò)keytool來(lái)生成公私鑰對(duì)的。

    可以使用openssl x509命令來(lái)查看公鑰證書的詳細(xì)信息:
    $ openssl x509 -in media.x509.pem -text -noout
    or,
    $ openssl x509 -in media.x509.pem -inform PEM -text -noout

    還可以使用JDK中的keytool來(lái)查看公鑰證書內(nèi)容,但其輸出內(nèi)容沒(méi)有openssl x509全面:
    $ keytool -printcert -v -file media.x509.pem

    有了key之后,可以使用工具“build/tools/releasetools/sign_target_files”來(lái)對(duì)TargetFiles重新簽名:
    $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip
    其中,new_keys_dir目錄中需要有四個(gè)key(media, platform, shared, releasekey)。注意:這里的releasekey將代替默認(rèn)的testkey(請(qǐng)參考build/tools/releasetools/sign_target_files腳本實(shí)現(xiàn)),也就是說(shuō),如果某個(gè)apk的Android.mk文件中的LOCAL_CERTIFICATE為testkey,那么在生成TargetFiles時(shí)是使用的build/target/product/security/testkey來(lái)簽名的,這里重新簽名時(shí)將使用new_keys_dir/releasekey來(lái)簽名。

    build/tools/releasetools/sign_target_files_apks是通過(guò)host/linux-x86/framework/signapk.jar來(lái)完成簽名的。也可以直接使用host/linux-x86/framework/signapk.jar來(lái)對(duì)某個(gè)apk進(jìn)行簽名:
    $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar
    其中,”-w”表示還對(duì)整個(gè)apk包(zip包)進(jìn)行簽名,并把簽名放在zip包的comment中。

    第三方APK簽名機(jī)制

    對(duì)于第三方應(yīng)用開發(fā)者而言,對(duì)APK簽名相對(duì)要簡(jiǎn)單得多。第三方應(yīng)用開發(fā)一般采用JDK中的keytool和jarsigner來(lái)完成簽名密鑰的管理和APK的簽名。

    使用keytool來(lái)生成存儲(chǔ)有公私鑰對(duì)的keystore:
    $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000

    查看生成的密鑰信息:
    $ keytool -list -keystore my-release-key.keystore -alias mykey -v
    or,
    $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc
    (注:獲取Base64格式的公鑰證書,RFC 1421)

    導(dǎo)出公鑰證書:
    $ keytool -export -keystore mystore -alias mykey -file my.der
    (注:二進(jìn)制格式公鑰證書,DER)
    $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc
    (注:Base64格式公鑰證書,PEM)

    對(duì)APK進(jìn)行簽名:
    $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey

    驗(yàn)證簽名:
    $ jarsigner -verify -verbose -certs my_application.apk

    在進(jìn)行Android二次開發(fā)時(shí),有時(shí)需要把build/target/product/security下面的公私鑰對(duì)轉(zhuǎn)換為keystore的形式,可以參考這篇文章:把Android源碼中的密碼對(duì)轉(zhuǎn)換為keystore的方法

    posted on 2011-11-22 11:08 MEYE 閱讀(5886) 評(píng)論(0)  編輯  收藏 所屬分類: Android3D
    主站蜘蛛池模板: 成人性生交大片免费看好| 亚洲精品无码高潮喷水A片软| 亚洲开心婷婷中文字幕| 久久亚洲高清综合| 国产偷窥女洗浴在线观看亚洲| 免费国产高清视频| 国产jizzjizz免费视频| 国产午夜无码视频免费网站| 成人永久免费高清| 又黄又大又爽免费视频| 婷婷亚洲天堂影院| 亚洲一区二区精品视频| 亚洲综合区小说区激情区| 久久久久亚洲AV成人网人人网站| 色久悠悠婷婷综合在线亚洲| 亚洲一区二区三区在线播放| 在线观看亚洲精品国产| 国产亚洲A∨片在线观看| 亚洲乱码日产一区三区| 亚洲成Av人片乱码色午夜| 亚洲国产精品特色大片观看完整版 | 亚洲国产av一区二区三区丶| 亚洲AV无码国产在丝袜线观看| 亚洲国产成人精品不卡青青草原| 青青草原精品国产亚洲av| 亚洲精品乱码久久久久久下载| 亚洲国产成人91精品| 丁香婷婷亚洲六月综合色| 久久久久亚洲精品无码网址色欲| 黄色片网站在线免费观看| 猫咪免费人成网站在线观看入口| 九九热久久免费视频| 久久免费区一区二区三波多野| 在线观看免费av网站| 成年私人影院免费视频网站| 国产一级一片免费播放i| 日日噜噜噜噜夜夜爽亚洲精品 | 国产亚洲精品高清在线| 亚洲av鲁丝一区二区三区| 亚洲性线免费观看视频成熟| 羞羞视频免费网站入口|