Android签名 制作签名文件
Posted Jackchen随心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android签名 制作签名文件相关的知识,希望对你有一定的参考价值。
你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:
1.公司开发一个新的app,如何创建一个应用签名?
2.为了安全性,android系统不想使用Google给的原生签名,如何定制系统签名?
这篇博客介绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。
目录
3. pk8/x509.pem : 用于Android系统的编译
一、Android的签名文件有三种类型,分别在以下情况使用
1. jks: 用于Android Studio编译
全称为Java key store,jks也是Android Studio中创建签名文件的格式
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.com'
执行命令时都会提示输入密码,这时不要输入密码,直接按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/emailAddress=android@android.com'
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.com'
这里要顺便介绍下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.com |
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.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android.com, 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生成签名文件
这个网上教材很多,我引用了两位博主的文章
https://blog.csdn.net/tzhenxiong/article/details/109901468
https://blog.csdn.net/anyanyan07/article/details/53493785
之前我会一直困惑为什么创建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的步骤相同
如果要查看生成的签名文件里面的签名信息,可以参考我的另外一篇博客
以上是关于Android签名 制作签名文件的主要内容,如果未能解决你的问题,请参考以下文章
您如何从 Eclipse 内部制作签名和混淆的 android 版本?