Android签名 制作签名文件

Posted Jackchen随心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android签名 制作签名文件相关的知识,希望对你有一定的参考价值。

你可能想知道 通过这篇博客可以解决哪些问题以及学到什么:

  1.公司开发一个新的app,如何创建一个应用签名?

  2.为了安全性,android系统不想使用Google给的原生签名,如何定制系统签名?

这篇博客介绍了如何制作签名文件,首先介绍Android开发中使用到的签名文件类型,然后介绍系统签名如何制作,最后介绍不同IDE用到的签名文件如何制作。

目录

一、Android的签名文件有三种类型,分别在以下情况使用

1.  jks: 用于Android Studio编译

2.  keystore: 用于Eclipse编译

3.  pk8/x509.pem   : 用于Android系统的编译

二、制作pk8/x509.pem格式系统签名文件

1.准备环境

2.制作过程

3.使用自定义签名

4.检查自定义签名 

三、制作jks格式的签名文件

四、制作keystore格式的签名文件


一、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,公司信息的参数比较多,它们的含义如下:

KeyDescriptionExample
CWhat is the two-letter country code for this unit?US
STWhat is the name of your State or Province?California
LWhat is the name of your City or Locality?Mountain View
OWhat is the name of your organization?Android
OUWhat is the name of your organizational unit?Android
CNWhat is your first and last name?Android
emailAddressWhat 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签名 (一) 查看签名信息

以上是关于Android签名 制作签名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何用Android 源码生成APK签名文件

Delphi XE5 图解为Android应用制作签名

您如何从 Eclipse 内部制作签名和混淆的 android 版本?

当我制作签名的 APK 时,我的 Android 本地数据库不起作用

Delphi XE5 图解为Android应用制作签名

如何对Android的APP进行签名