Android签名(⼆)制作签名⽂件
你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:
1.公司开发⼀个新的app,如何创建⼀个应⽤签名?
2.为了安全性,Android系统不想使⽤Google给的原⽣签名,如何定制系统签名?
这篇博客介绍了如何制作签名⽂件,⾸先介绍Android开发中使⽤到的签名⽂件类型,然后介绍系统签名如何制作,最后介绍不同IDE⽤到
的签名⽂件如何制作。
⽬录
⼀、Android的签名⽂件有三种类型,分别在以下情况使⽤
1.  jks: ⽤于Android Studio编译
全称为Java key store,jks也是Android Studio中创建签名⽂件的格式android获取真正的签名
2.  keystore: ⽤于Eclipse编译
最早开发Android的时候的签名⽂件,⽬前开发Android都使⽤AS,⽽AS也兼容keystore.
3.  pk8/x509.pem  : ⽤于Android系统的编译
这个是系统的签名⽂件,同样也可以给APK签名
⼆、制作pk8/x509.pem格式系统签名⽂件
1.准备环境
需要在linux系统中,且有编译Android源码的环境
2.制作过程
1)⽣成签名⽂件
要对Android系统进⾏签名,需要⽣成四种类型的key⽂件:
a) releasekey
b) media
c) shared
d) platform
我们就拿releasekey 为例简单介绍下⽣成过程
使⽤Android源码中⾃带的make_key⼯具来⽣成签名,路径为development/tools/make_key
在Android系统源码根⽬录下,新建make_key_security⽬录,进⼊到该⽬录,执⾏下⾯的命令
../development/tools/make_key releasekey '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android
执⾏命令时都会提⽰输⼊密码,这时不要输⼊密码,直接按Enter健;你想想如果在编译Android系统过程中要你不断输⼊密码进⾏确认,
你是不是会疯掉如下就会在make_key_security⽬录中⽣成密钥对 releasekey.pk8 (私钥) / releasekey.x509.pem (公钥)
Jack:~/aosp/make_key_security$ ../development/tools/make_key releasekey '/C=US/ST=California/L
=Mountain View/O=Android/OU=Android/CN=Android/emailA Enter password for 'releasekey' (blank for none; password will be visible):
creating releasekey.pk8 with no password
Generating RSA private key, 2048 bit long modulus (2 primes) ....................................................................................................+++++
....+++++
e is 65537 (0x010001)
Can't load /home/ecarx/.rnd into RNG
139895179936192:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ecarx/.rnd
Jack:~/aosp/make_key_security$ ls
releasekey.pk8  releasekey.x509.pem
同样步骤将命令中的releasekey换成 media/shared/platform,然后执⾏,⽣成的所有秘钥对如下:
Jack:~/aosp/make_key_security$ ls -l
总⽤量 40
-rw------- 1 ecarx ecarx 1217 8⽉  14 23:45 media.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8⽉  14 23:45 media.x509.pem
-rw------- 1 ecarx ecarx 1218 8⽉  14 23:44 platform.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8⽉  14 23:44 platform.x509.pem
-rw------- 1 ecarx ecarx 1218 8⽉  14 23:30 releasekey.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8⽉  14 23:30 releasekey.x509.pem
-rw------- 1 ecarx ecarx 1217 8⽉  14 23:45 shared.pk8
-rw-rw-r-- 1 ecarx ecarx 1464 8⽉  14 23:45 shared.x509.pem
2)介绍⼀下make_key的参数
../development/tools/make_key releasekey'/C=US/ST=California/L=Mountain
View/O=Android/OU=Android/CN=Android/emailAddress=android@android'
这⾥要顺便介绍下make_key的参数。第⼀个参数是要⽣成key的名字,第⼆个参数是关于你公司的信息。key的名字很好理解,就是前⾯提
到的4中类型的key,公司信息的参数⽐较多,它们的含义如下:
Key Description Example
C What is the two-letter country code for this unit?US
ST What is the name of your State or Province?California
L What is the name of your City or Locality?Mountain View
O What is the name of your organization?Android
OU What is the name of your organizational unit?Android
CN What is your first and last name?Android
emailAddress What is the email address?android@android
3.使⽤⾃定义签名
1) 修改 /build/core/config.mk 中定义变量:
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
2) 修改 /build/core/Makefile 中定义变量:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif
4.检查⾃定义签名
:
Jackchen:~/aosp/make_key_security$ keytool -printcert -file releasekey.x509.pem
所有者: EMAILADDRESS=android@android, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
序列号: 2c5386028cf9208120dcb735e63e6ce31e57faf7
⽣效时间: Sat Aug 14 23:30:08 CST 2021, 失效时间: Wed Dec 30 23:30:08 CST 2048
证书指纹:
SHA1: 6A:72:69:63:9D:07:13:09:35:9C:22:31:6C:A1:C8:74:CF:FE:F1:8B
SHA256: 45:AF:80:A8:10:AD:80:C2:71:C9:97:8A:D6:CC:FA:D0:AB:69:BA:B3:CE:80:94:D5:D0:70:63:
E8:71:B0:06:CE
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
build.prop中可以查看到变量:
ro.build.tags=release-keys
三、制作jks格式的签名⽂件
1.⽤Android Studio⽣成签名⽂件
这个⽹上教材很多,我引⽤了两位博主的⽂章
之前我会⼀直困惑为什么创建jks签名⽂件时要输⼊两套秘密(不是确认秘密哦),后来经过查阅资料和实操验证终于弄懂了,这⾥和⼤家分享以下:
你可以将jks理解为⼀个仓库,⼀个密钥仓库,其实keystore这个名字就很直观,访问这个仓库需要⼀个秘密; 这个仓库⾥⾯可以存放很多很多key,所以每⼀个key都需要有⼀个⾃⼰的名字alias,访问每个key都需要密码aliaspasswd,下⾯通过⽰意图说明:
2.从系统签名⽂件转化⽽来
1)获取android平台key
取源码⽬录build\target\product\security下platform.pk8 platform.x509.pem放到⼀个⽬录中
2)⽣成platform.pem
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
3)⽣成pkcs12
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name androiddebugkey
<pass:android> 对应pkcs12的密码,下⼀步需要⽤到
4)⽣成debug.jks
keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype
PKCS12 -srcstorepass android -alias androiddebugkey
<-srcstorepass android>        上⼀步⽣成的pkcs12密码
<-deststorepass android>    jks/keystore的密码
<-alias androiddebugkey>    key的别名
以上步骤就⽣成了platform.jks就直接可以⽤于Android Studio签名了,⽤到的命令如下:
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
openssl pkcs12 -export -in  platform.x509.pem -inkey platform.pem -out platform.p12  -password pass:android -name androiddebugkey
keytool -importkeystore -deststorepass android -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android
另外还将以上这些命令写成了⼀个脚本,只要将platform.pk8 platform.x509.pem放到对应⽬录下,然后运⾏脚本,输⼊对应参数即可,
四、制作keystore格式的签名⽂件
1.从系统签名⽂件转化⽽来
和制作jks的步骤相同
如果要查看⽣成的签名⽂件⾥⾯的签名信息,可以参考我的另外⼀篇博客

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。