也有提到怎么單獨(dú)給一個(gè)apk簽名,這里補(bǔ)充一下android的簽名權(quán)限控制機(jī)制。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到合陽(yáng)網(wǎng)站設(shè)計(jì)與合陽(yáng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋合陽(yáng)地區(qū)。
android的標(biāo)準(zhǔn)簽名key有:
?testkey
?media
latform
hared
以上的四種,可以在源碼的/build/target/product/security里面看到對(duì)應(yīng)的密鑰,其中shared.pk8代表私鑰,shared.x509.pem公鑰,一定是成對(duì)出現(xiàn)的。
其中testkey是作為android編譯的時(shí)候默認(rèn)的簽名key,如果系統(tǒng)中的apk的android.mk中沒(méi)有設(shè)置LOCAL_CERTIFICATE的值,就默認(rèn)使用testkey。
而如果設(shè)置成:
LOCAL_CERTIFICATE := platform
就代表使用platform來(lái)簽名,這樣的話這個(gè)apk就擁有了和system相同的簽名,因?yàn)橄到y(tǒng)級(jí)別的簽名也是使用的platform來(lái)簽名,此時(shí)使用android:sharedUserId="android.uid.system"才有用!
?在/build/target/product/security目錄下有個(gè)README,里面有說(shuō)怎么制作這些key以及使用問(wèn)題(android4.2):
?從上面可以看出來(lái)在源碼下的/development/tools目錄下有個(gè)make_key的腳本,通過(guò)傳入兩個(gè)參數(shù)就可以生成一對(duì)簽名用的key。
其中第一個(gè)為key的名字,一般都默認(rèn)成android本身有的,因?yàn)楹芏嗟胤蕉寄J(rèn)使用了這些名字,我們自定義的話只需要對(duì)第二個(gè)參數(shù)動(dòng)手腳,定義如下:
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 addre
另外在使用上面的make_key腳本生成key的過(guò)程中會(huì)提示輸入password,我的處理是不輸入,直接enter,不要密碼!后面解釋,用自定義的key替換/security下面的。
可以看到android源碼里面的key使用的第二個(gè)參數(shù)就是上面README里面的,是公開(kāi)的,所以要release版本的系統(tǒng)的話,肯定要有自己的簽名key才能起到一個(gè)安全控制作用。
在上面提到如果apk中的編譯選項(xiàng)LOCAL_CERTIFICATE沒(méi)有設(shè)置的話,就會(huì)使用默認(rèn)的testkey作為簽名key,我們可以修改成自己想要的key,按照上面的步驟制作一個(gè)releasekey,修改android配置在/build/core/config.mk中定義變量:
在主makefile文件里面:
ifeq?($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_VERSION_TAGS?+=?release-key
這樣的話默認(rèn)的所有簽名將會(huì)使用releasekey。
修改完之后就要編譯了,如果上面的這些key在制作的時(shí)候輸入了password就會(huì)出現(xiàn)如下錯(cuò)誤:
我在網(wǎng)上找到了合理的解釋:
其實(shí)會(huì)出現(xiàn)這個(gè)錯(cuò)誤的最根本的原因是多線程的問(wèn)題。在編譯的時(shí)候?yàn)榱思铀僖话愣紩?huì)執(zhí)行make -jxxx,這樣本來(lái)需要手動(dòng)輸入密碼的時(shí)候,由于其它線程的運(yùn)行,就會(huì)導(dǎo)致影響當(dāng)前的輸入終端,所以就會(huì)導(dǎo)致密碼無(wú)法輸入的情況!
再編譯完成之后也可以在build.prop中查看到變量:
這樣處理了之后編譯出來(lái)的都是簽名過(guò)的了,系統(tǒng)才算是release版本
我發(fā)現(xiàn)我這樣處理之后,整個(gè)系統(tǒng)的算是全部按照我的要求簽名了。
網(wǎng)上看到還有另外的簽名release辦法,但是應(yīng)該是針對(duì)另外的版本的,借用學(xué)習(xí)一下:
make?-j4?PRODUCT-product_modul-user?dist
這個(gè)怎么跟平時(shí)的編譯不一樣,后面多了兩個(gè)參數(shù)PRODUCT-product_modul-user 和 dist. 編譯完成之后回在源碼/out/dist/目錄內(nèi)生成個(gè)product_modul-target_files開(kāi)頭的zip文件.這就是我們需要進(jìn)行簽名的文件系統(tǒng).
我的product_modul 是full_gotechcn,后面加“-user”代表的是最終用戶版本,關(guān)于這個(gè)命名以及product_modul等可參考
編譯出需要簽名的zip壓縮包之后,就是利用/security下面的準(zhǔn)備的key進(jìn)行簽名了:
./build/tools/releasetools/sign_target_files_apks?-d?/build/target/product/security??out/dist/full_gotechcn-target_files.zip???out/dist/signed_target_files.zi
簽名目標(biāo)文件 輸出成signed_target_files.zi
如果出現(xiàn)某些apk出錯(cuò),可以通過(guò)在full_gotechcn-target_files.zip前面加參數(shù)"-e =" 來(lái)過(guò)濾這些apk.
然后再通過(guò)image的腳本生成imag的zip文件,這種方式不適用與我目前的工程源碼,沒(méi)有做過(guò)多驗(yàn)證!
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)中。
在編譯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)簽名。
uild/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中。
對(duì)于第三方應(yīng)用開(kāi)發(fā)者而言,對(duì)APK簽名相對(duì)要簡(jiǎn)單得多。第三方應(yīng)用開(kāi)發(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二次開(kāi)發(fā)時(shí),有時(shí)需要把build/target/product/security下面的公私鑰對(duì)轉(zhuǎn)換為keystore的形式,可以參考這篇文章:把Android源碼中的密碼對(duì)轉(zhuǎn)換為keystore的方法。
在微信開(kāi)放平臺(tái)申請(qǐng)app應(yīng)用的時(shí)候,遇到要填寫 應(yīng)用簽名 一欄。
找到簽名文件
keytool -list -v -keystore xxx.keystore
證書指紋節(jié)點(diǎn)下的MD5值轉(zhuǎn)成小寫,去掉冒號(hào)。
首先跟隨 生成keystore和應(yīng)用簽名 ,生成 .jks 簽名文件,
然后跟隨 微信開(kāi)放平臺(tái)Android應(yīng)用簽名的本質(zhì)及如何獲取 的第三、四步,生成帶簽名的apk,并用專門的工具查看應(yīng)用簽名。
最后用工具查看到應(yīng)用簽名后,我們發(fā)現(xiàn),其實(shí)它就是keystore文件的MD5值。
這樣,我們就能夠 查看應(yīng)用簽名了
如果你在 修改簽名 后,進(jìn)入微信授權(quán)頁(yè)面失敗,且提示"應(yīng)用簽名與微信開(kāi)放平臺(tái)上的簽名不一致",有可能是 微信緩存 的緣故。
根據(jù) android之微信開(kāi)放平臺(tái)修改簽名 ,只要清理微信緩存,或重裝微信即可。
接下來(lái)還有一個(gè)問(wèn)題沒(méi)解決:
解決方法參考 Android Studio直接運(yùn)行調(diào)試簽名包
但這樣的做法會(huì)顯示暴露keystore信息,所以跟隨 Android Studio的兩種模式及簽名配置 的后半部分,可以讓項(xiàng)目間接引入keystore信息。
查看應(yīng)用簽名的MD5、SHA1、SHA256值及簽名算法。
查看keystore文件簽名信息,前提要有keystore文件和密鑰,才能夠獲取keystore文件的簽名信息。
方法一:(適用于 AS)
1)打開(kāi) AS工具窗口欄右邊的 Gradle - Project - app - Tasks - android - signingReport,雙擊運(yùn)行 signingReport;
在沒(méi)有keystore文件和密鑰的情況下,要想查看我們所需應(yīng)用的簽名信息,就需要借助 keytool 工具來(lái)完成。
首先解壓要查看的apk包,通過(guò)數(shù)據(jù)證書管理工具 keytool 查看apk的簽名信息。具體步驟如下:
1)將apk修改后綴為 .rar 文件后進(jìn)行解壓;
2)進(jìn)入解壓后的 META-INF 目錄,找到該目錄下的 xxx.RSA 文件;
3)通過(guò)命令 cmd 打開(kāi)DOS窗口,輸入命令 : keytool -printcert -file [RSA文件路徑]
在查看應(yīng)用簽名信息過(guò)程中,可能會(huì)遇到以下幾個(gè)問(wèn)題:
定位 keytool.exe 工具所在的目錄,使用相關(guān)操作命令查看簽名信息;
JKS(Java KeyStore) :是 Java 的 keytools 證書工具支持的證書私鑰格式。jks 包含了公鑰和私鑰,可以通過(guò) keytool 工具來(lái)將公鑰和私鑰導(dǎo)出。因?yàn)榘怂借€,所以 jks 文件通常通過(guò)一個(gè)密碼來(lái)加以保護(hù)。一般用于 Java 或者 Tomcat 服務(wù)器。
PKCS #12 :定義了一種存檔文件格式,用于實(shí)現(xiàn)存儲(chǔ)許多加密對(duì)象在一個(gè)單獨(dú)的文件中。通常用它來(lái)打包一個(gè)私鑰及有關(guān)的 X.509 證書,或者打包信任鏈的全部項(xiàng)目。
定位 keytool.exe 工具所在的目錄,使用操作命令轉(zhuǎn)換證書格式;
打開(kāi) Android Studio,然后選擇右邊的 Gradle 標(biāo)簽,選擇一個(gè)項(xiàng)目,然后選擇 signingReport 這個(gè) Task,雙擊運(yùn)行
然后選擇右下角的 Gradle Console,就可以看到簽名信息了
使用解壓工具解壓 APK 文件,在 META-INF 文件夾拿到 CERT.RSA 文件。假設(shè) CERT.RSA 文件的路徑是 C:\Users\Administrator\Desktop\CERT.RSA 。在 CMD 中輸入
就可以得到簽名信息了
jks 作為簽名文件,也可以通過(guò)命令行來(lái)查看的其中的簽名信息,假設(shè)簽名文件的名稱是 test_release.jks ,在終端中輸入
即可得到簽名信息
名稱欄目:android簽名獲取,android簽名獲取工具
地址分享:http://jinyejixie.com/article18/dsseigp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站導(dǎo)航、小程序開(kāi)發(fā)、面包屑導(dǎo)航、微信小程序、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)